diff mbox series

[v4] libibverbs: display gid type in ibv_devinfo

Message ID 1580745415-19744-1-git-send-email-devesh.sharma@broadcom.com (mailing list archive)
State Superseded
Headers show
Series [v4] libibverbs: display gid type in ibv_devinfo | expand

Commit Message

Devesh Sharma Feb. 3, 2020, 3:56 p.m. UTC
It becomes difficult to make out from the output of ibv_devinfo
if a particular gid index is RoCE v2 or not.

Adding a string to the output of ibv_devinfo -v to display the
gid type at the end of gid.

The output would look something like below:
$ ibv_devinfo -v -d bnxt_re2
hca_id: bnxt_re2
 transport:             InfiniBand (0)
 fw_ver:                216.0.220.0
 node_guid:             b226:28ff:fed3:b0f0
 sys_image_guid:        b226:28ff:fed3:b0f0
  .
  .
  .
  .
       phys_state:      LINK_UP (5)
       GID[  0]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, IB/RoCE v1
       GID[  1]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, RoCE v2
       GID[  2]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, IB/RoCE v1
       GID[  3]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, RoCE v2
$
$

Reviewed-by: Leon Romanovsky <leon@kernel.org>
Reviewed-by: Gal Pressman <galpress@amazon.com>
Reviewed-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
---
 libibverbs/driver.h           |  1 +
 libibverbs/examples/devinfo.c | 22 ++++++++++++++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

Comments

Jason Gunthorpe Feb. 3, 2020, 4:08 p.m. UTC | #1
On Mon, Feb 03, 2020 at 10:56:55AM -0500, Devesh Sharma wrote:
> It becomes difficult to make out from the output of ibv_devinfo
> if a particular gid index is RoCE v2 or not.
> 
> Adding a string to the output of ibv_devinfo -v to display the
> gid type at the end of gid.
> 
> The output would look something like below:
> $ ibv_devinfo -v -d bnxt_re2
> hca_id: bnxt_re2
>  transport:             InfiniBand (0)
>  fw_ver:                216.0.220.0
>  node_guid:             b226:28ff:fed3:b0f0
>  sys_image_guid:        b226:28ff:fed3:b0f0
>   .
>   .
>   .
>   .
>        phys_state:      LINK_UP (5)
>        GID[  0]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, IB/RoCE v1
>        GID[  1]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, RoCE v2
>        GID[  2]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, IB/RoCE v1
>        GID[  3]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, RoCE v2

I think you should display the RoCEv2 GID in IPv6 notation, since it
isn't really a GID anyhmore. The IPv6 notation should automatically
show the IPv4 dotted quad

Jason
Devesh Sharma Feb. 3, 2020, 4:27 p.m. UTC | #2
On Mon, Feb 3, 2020 at 9:38 PM Jason Gunthorpe <jgg@ziepe.ca> wrote:
>
> On Mon, Feb 03, 2020 at 10:56:55AM -0500, Devesh Sharma wrote:
> > It becomes difficult to make out from the output of ibv_devinfo
> > if a particular gid index is RoCE v2 or not.
> >
> > Adding a string to the output of ibv_devinfo -v to display the
> > gid type at the end of gid.
> >
> > The output would look something like below:
> > $ ibv_devinfo -v -d bnxt_re2
> > hca_id: bnxt_re2
> >  transport:             InfiniBand (0)
> >  fw_ver:                216.0.220.0
> >  node_guid:             b226:28ff:fed3:b0f0
> >  sys_image_guid:        b226:28ff:fed3:b0f0
> >   .
> >   .
> >   .
> >   .
> >        phys_state:      LINK_UP (5)
> >        GID[  0]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, IB/RoCE v1
> >        GID[  1]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, RoCE v2
> >        GID[  2]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, IB/RoCE v1
> >        GID[  3]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, RoCE v2
>
> I think you should display the RoCEv2 GID in IPv6 notation, since it
> isn't really a GID anyhmore. The IPv6 notation should automatically
> show the IPv4 dotted quad

There are many format specifiers, which one are you indicating? are
those supported in printf()?
>
> Jason
Jason Gunthorpe Feb. 3, 2020, 4:50 p.m. UTC | #3
On Mon, Feb 03, 2020 at 09:57:39PM +0530, Devesh Sharma wrote:
> On Mon, Feb 3, 2020 at 9:38 PM Jason Gunthorpe <jgg@ziepe.ca> wrote:
> >
> > On Mon, Feb 03, 2020 at 10:56:55AM -0500, Devesh Sharma wrote:
> > > It becomes difficult to make out from the output of ibv_devinfo
> > > if a particular gid index is RoCE v2 or not.
> > >
> > > Adding a string to the output of ibv_devinfo -v to display the
> > > gid type at the end of gid.
> > >
> > > The output would look something like below:
> > > $ ibv_devinfo -v -d bnxt_re2
> > > hca_id: bnxt_re2
> > >  transport:             InfiniBand (0)
> > >  fw_ver:                216.0.220.0
> > >  node_guid:             b226:28ff:fed3:b0f0
> > >  sys_image_guid:        b226:28ff:fed3:b0f0
> > >   .
> > >   .
> > >   .
> > >   .
> > >        phys_state:      LINK_UP (5)
> > >        GID[  0]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, IB/RoCE v1
> > >        GID[  1]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, RoCE v2
> > >        GID[  2]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, IB/RoCE v1
> > >        GID[  3]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, RoCE v2
> >
> > I think you should display the RoCEv2 GID in IPv6 notation, since it
> > isn't really a GID anyhmore. The IPv6 notation should automatically
> > show the IPv4 dotted quad
> 
> There are many format specifiers, which one are you indicating? are
> those supported in printf()?

inet_ntop(AF_INET6)

Jason
Devesh Sharma Feb. 3, 2020, 5:52 p.m. UTC | #4
On Mon, Feb 3, 2020 at 10:20 PM Jason Gunthorpe <jgg@ziepe.ca> wrote:
>
> On Mon, Feb 03, 2020 at 09:57:39PM +0530, Devesh Sharma wrote:
> > On Mon, Feb 3, 2020 at 9:38 PM Jason Gunthorpe <jgg@ziepe.ca> wrote:
> > >
> > > On Mon, Feb 03, 2020 at 10:56:55AM -0500, Devesh Sharma wrote:
> > > > It becomes difficult to make out from the output of ibv_devinfo
> > > > if a particular gid index is RoCE v2 or not.
> > > >
> > > > Adding a string to the output of ibv_devinfo -v to display the
> > > > gid type at the end of gid.
> > > >
> > > > The output would look something like below:
> > > > $ ibv_devinfo -v -d bnxt_re2
> > > > hca_id: bnxt_re2
> > > >  transport:             InfiniBand (0)
> > > >  fw_ver:                216.0.220.0
> > > >  node_guid:             b226:28ff:fed3:b0f0
> > > >  sys_image_guid:        b226:28ff:fed3:b0f0
> > > >   .
> > > >   .
> > > >   .
> > > >   .
> > > >        phys_state:      LINK_UP (5)
> > > >        GID[  0]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, IB/RoCE v1
> > > >        GID[  1]:        fe80:0000:0000:0000:b226:28ff:fed3:b0f0, RoCE v2
> > > >        GID[  2]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, IB/RoCE v1
> > > >        GID[  3]:        0000:0000:0000:0000:0000:ffff:c0aa:0165, RoCE v2
> > >
> > > I think you should display the RoCEv2 GID in IPv6 notation, since it
> > > isn't really a GID anyhmore. The IPv6 notation should automatically
> > > show the IPv4 dotted quad
> >
> > There are many format specifiers, which one are you indicating? are
> > those supported in printf()?
>
> inet_ntop(AF_INET6)
Done!
>
> Jason
Gal Pressman Feb. 3, 2020, 6:18 p.m. UTC | #5
On 03/02/2020 17:56, Devesh Sharma wrote:
> diff --git a/libibverbs/driver.h b/libibverbs/driver.h
> index a0e6f89..fc0699d 100644
> --- a/libibverbs/driver.h
> +++ b/libibverbs/driver.h
> @@ -84,6 +84,7 @@ enum verbs_qp_mask {
>  enum ibv_gid_type {
>  	IBV_GID_TYPE_IB_ROCE_V1,
>  	IBV_GID_TYPE_ROCE_V2,
> +	IBV_GID_TYPE_INVALID
>  };

I don't think that's right.
You're adding a new enum value to libibverbs, but it's not really
used/implemented there.
If devinfo needs an invalid GID value, make it local to that program.
Devesh Sharma Feb. 3, 2020, 6:23 p.m. UTC | #6
On Mon, Feb 3, 2020 at 11:48 PM Gal Pressman <galpress@amazon.com> wrote:
>
> On 03/02/2020 17:56, Devesh Sharma wrote:
> > diff --git a/libibverbs/driver.h b/libibverbs/driver.h
> > index a0e6f89..fc0699d 100644
> > --- a/libibverbs/driver.h
> > +++ b/libibverbs/driver.h
> > @@ -84,6 +84,7 @@ enum verbs_qp_mask {
> >  enum ibv_gid_type {
> >       IBV_GID_TYPE_IB_ROCE_V1,
> >       IBV_GID_TYPE_ROCE_V2,
> > +     IBV_GID_TYPE_INVALID
> >  };
>
> I don't think that's right.
> You're adding a new enum value to libibverbs, but it's not really
> used/implemented there.
> If devinfo needs an invalid GID value, make it local to that program.

the enum can be used by other applications too, if those are yet to be
coded in future. I thought its a good practice to put things at one
place once for all.
Leon Romanovsky Feb. 3, 2020, 7:44 p.m. UTC | #7
On Mon, Feb 03, 2020 at 11:53:47PM +0530, Devesh Sharma wrote:
> On Mon, Feb 3, 2020 at 11:48 PM Gal Pressman <galpress@amazon.com> wrote:
> >
> > On 03/02/2020 17:56, Devesh Sharma wrote:
> > > diff --git a/libibverbs/driver.h b/libibverbs/driver.h
> > > index a0e6f89..fc0699d 100644
> > > --- a/libibverbs/driver.h
> > > +++ b/libibverbs/driver.h
> > > @@ -84,6 +84,7 @@ enum verbs_qp_mask {
> > >  enum ibv_gid_type {
> > >       IBV_GID_TYPE_IB_ROCE_V1,
> > >       IBV_GID_TYPE_ROCE_V2,
> > > +     IBV_GID_TYPE_INVALID
> > >  };
> >
> > I don't think that's right.
> > You're adding a new enum value to libibverbs, but it's not really
> > used/implemented there.
> > If devinfo needs an invalid GID value, make it local to that program.
>
> the enum can be used by other applications too, if those are yet to be
> coded in future. I thought its a good practice to put things at one
> place once for all.

Yes, as long as IBV_GID_TYPE_INVALID can be returned by ibv_query_gid_type(),
but it doesn't.

Thanks
diff mbox series

Patch

diff --git a/libibverbs/driver.h b/libibverbs/driver.h
index a0e6f89..fc0699d 100644
--- a/libibverbs/driver.h
+++ b/libibverbs/driver.h
@@ -84,6 +84,7 @@  enum verbs_qp_mask {
 enum ibv_gid_type {
 	IBV_GID_TYPE_IB_ROCE_V1,
 	IBV_GID_TYPE_ROCE_V2,
+	IBV_GID_TYPE_INVALID
 };
 
 enum ibv_mr_type {
diff --git a/libibverbs/examples/devinfo.c b/libibverbs/examples/devinfo.c
index bf53eac..5bf1a39 100644
--- a/libibverbs/examples/devinfo.c
+++ b/libibverbs/examples/devinfo.c
@@ -162,8 +162,18 @@  static const char *vl_str(uint8_t vl_num)
 	}
 }
 
+static const char *gid_type_str(enum ibv_gid_type type)
+{
+	switch (type) {
+	case IBV_GID_TYPE_IB_ROCE_V1: return "IB/RoCE v1";
+	case IBV_GID_TYPE_ROCE_V2: return "RoCE v2";
+	default: return "Invalid gid type";
+	}
+}
+
 static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tbl_len)
 {
+	enum ibv_gid_type type;
 	union ibv_gid gid;
 	int rc = 0;
 	int i;
@@ -175,8 +185,15 @@  static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tb
 			       port_num, i);
 			return rc;
 		}
+
+		rc = ibv_query_gid_type(ctx, port_num, i, &type);
+		if (rc) {
+			rc = 0;
+			type = IBV_GID_TYPE_INVALID;
+		}
+
 		if (!null_gid(&gid))
-			printf("\t\t\tGID[%3d]:\t\t%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n",
+			printf("\t\t\tGID[%3d]:\t\t%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x, %s\n",
 			       i,
 			       gid.raw[ 0], gid.raw[ 1],
 			       gid.raw[ 2], gid.raw[ 3],
@@ -185,7 +202,8 @@  static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tb
 			       gid.raw[ 8], gid.raw[ 9],
 			       gid.raw[10], gid.raw[11],
 			       gid.raw[12], gid.raw[13],
-			       gid.raw[14], gid.raw[15]);
+			       gid.raw[14], gid.raw[15],
+			       gid_type_str(type));
 	}
 	return rc;
 }