diff mbox series

[v5] libibverbs: display gid type in ibv_devinfo

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

Commit Message

Devesh Sharma Feb. 3, 2020, 5:52 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::b226:28ff:fed3:b0f0, IB/RoCE v1
       GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
       GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
       GID[  3]:               ::ffff:192.170.1.101, RoCE v2
$
$

Reviewed-by: Jason Gunthrope <jgg@ziepe.ca>
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 | 35 ++++++++++++++++++++++++-----------
 2 files changed, 25 insertions(+), 11 deletions(-)

Comments

Jason Gunthorpe Feb. 3, 2020, 5:53 p.m. UTC | #1
On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
>        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
>        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
>        GID[  3]:               ::ffff:192.170.1.101, RoCE v2

v1 GIDs are GIDs and should never be formed as IPv6 addreses..

Jason
Devesh Sharma Feb. 3, 2020, 6:01 p.m. UTC | #2
On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com> wrote:
>
> On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
>
> v1 GIDs are GIDs and should never be formed as IPv6 addreses..
So, V1 gids would fall back to old style of display and there will be
one more check for gid-type inside the loop...
>
> Jason
Jason Gunthorpe Feb. 3, 2020, 6:04 p.m. UTC | #3
On Mon, Feb 03, 2020 at 11:31:06PM +0530, Devesh Sharma wrote:
> On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com> wrote:
> >
> > On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> > >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> > >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> > >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> >
> > v1 GIDs are GIDs and should never be formed as IPv6 addreses..
> So, V1 gids would fall back to old style of display and there will be
> one more check for gid-type inside the loop...

Yes

Parav should we show both the v6 and classic format for a v2 GID? ie

        GID[  3]:               0000:0000:0000:ffff:xxxx:xxxx:xxxx, RoCE v2
                                ::ffff:192.170.1.101

Lets also supress the 'IB/RoCE v1' string on !roce device. IB only has
one GID type, there is no reason to print anything

Jason
Devesh Sharma Feb. 3, 2020, 6:09 p.m. UTC | #4
On Mon, Feb 3, 2020 at 11:34 PM Jason Gunthorpe <jgg@mellanox.com> wrote:
>
> On Mon, Feb 03, 2020 at 11:31:06PM +0530, Devesh Sharma wrote:
> > On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com> wrote:
> > >
> > > On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> > > >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> > > >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> > > >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> > >
> > > v1 GIDs are GIDs and should never be formed as IPv6 addreses..
> > So, V1 gids would fall back to old style of display and there will be
> > one more check for gid-type inside the loop...
>
> Yes
Sure.
>
> Parav should we show both the v6 and classic format for a v2 GID? ie
>
>         GID[  3]:               0000:0000:0000:ffff:xxxx:xxxx:xxxx, RoCE v2
>                                 ::ffff:192.170.1.101
>
> Lets also supress the 'IB/RoCE v1' string on !roce device. IB only has
> one GID type, there is no reason to print anything
W.r.t. IB devices, this makes sense, While sending v1 I had a thought
in mind on IB devices.
>
> Jason
Leon Romanovsky Feb. 3, 2020, 7:46 p.m. UTC | #5
On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
>        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
>        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
>        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> $
> $
>
> Reviewed-by: Jason Gunthrope <jgg@ziepe.ca>
> 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 | 35 ++++++++++++++++++++++++-----------
>  2 files changed, 25 insertions(+), 11 deletions(-)
>
> 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
>  };
>

Agree with Gal, this hunk shouldn't be in the patch at all.

Thanks
Parav Pandit Feb. 4, 2020, 4:27 a.m. UTC | #6
> From: Jason Gunthorpe <jgg@mellanox.com>
> Sent: Monday, February 3, 2020 11:34 PM
> 
> On Mon, Feb 03, 2020 at 11:31:06PM +0530, Devesh Sharma wrote:
> > On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com>
> wrote:
> > >
> > > On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> > > >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> > > >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> > > >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> > >
> > > v1 GIDs are GIDs and should never be formed as IPv6 addreses..
> > So, V1 gids would fall back to old style of display and there will be
> > one more check for gid-type inside the loop...
> 
> Yes
> 
> Parav should we show both the v6 and classic format for a v2 GID? ie
> 
>         GID[  3]:               0000:0000:0000:ffff:xxxx:xxxx:xxxx, RoCE v2
>                                 ::ffff:192.170.1.101
> 
Due to lack of support of GID's netdev, v1/v2 type info in ibv_devinfo output, most users that I know of are using non upstream show_gids script.
So changing format here shouldn't break the existing users scripts.
There may be some scripts that may find this format different.
So I think printing both is likely a more safer option.

> Lets also supress the 'IB/RoCE v1' string on !roce device. IB only has one GID
> type, there is no reason to print anything
> 
> Jason
Devesh Sharma Feb. 4, 2020, 5:07 a.m. UTC | #7
On Tue, Feb 4, 2020 at 1:16 AM Leon Romanovsky <leon@kernel.org> wrote:
>
> On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> > $
> > $
> >
> > Reviewed-by: Jason Gunthrope <jgg@ziepe.ca>
> > 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 | 35 ++++++++++++++++++++++++-----------
> >  2 files changed, 25 insertions(+), 11 deletions(-)
> >
> > 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
> >  };
> >
>
> Agree with Gal, this hunk shouldn't be in the patch at all.
Okay, will change.
>
> Thanks
Devesh Sharma Feb. 4, 2020, 5:08 a.m. UTC | #8
On Tue, Feb 4, 2020 at 9:57 AM Parav Pandit <parav@mellanox.com> wrote:
>
>
>
> > From: Jason Gunthorpe <jgg@mellanox.com>
> > Sent: Monday, February 3, 2020 11:34 PM
> >
> > On Mon, Feb 03, 2020 at 11:31:06PM +0530, Devesh Sharma wrote:
> > > On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com>
> > wrote:
> > > >
> > > > On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> > > > >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> > > > >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> > > > >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> > > >
> > > > v1 GIDs are GIDs and should never be formed as IPv6 addreses..
> > > So, V1 gids would fall back to old style of display and there will be
> > > one more check for gid-type inside the loop...
> >
> > Yes
> >
> > Parav should we show both the v6 and classic format for a v2 GID? ie
> >
> >         GID[  3]:               0000:0000:0000:ffff:xxxx:xxxx:xxxx, RoCE v2
> >                                 ::ffff:192.170.1.101
> >
> Due to lack of support of GID's netdev, v1/v2 type info in ibv_devinfo output, most users that I know of are using non upstream show_gids script.
> So changing format here shouldn't break the existing users scripts.
> There may be some scripts that may find this format different.
> So I think printing both is likely a more safer option.
>
> > Lets also supress the 'IB/RoCE v1' string on !roce device. IB only has one GID
> > type, there is no reason to print anything
> >
Okay, so two changes and one from Gal's comment. Will change.
> > Jason
Leon Romanovsky Feb. 4, 2020, 7:17 a.m. UTC | #9
On Tue, Feb 04, 2020 at 04:27:45AM +0000, Parav Pandit wrote:
>
>
> > From: Jason Gunthorpe <jgg@mellanox.com>
> > Sent: Monday, February 3, 2020 11:34 PM
> >
> > On Mon, Feb 03, 2020 at 11:31:06PM +0530, Devesh Sharma wrote:
> > > On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com>
> > wrote:
> > > >
> > > > On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> > > > >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> > > > >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> > > > >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> > > >
> > > > v1 GIDs are GIDs and should never be formed as IPv6 addreses..
> > > So, V1 gids would fall back to old style of display and there will be
> > > one more check for gid-type inside the loop...
> >
> > Yes
> >
> > Parav should we show both the v6 and classic format for a v2 GID? ie
> >
> >         GID[  3]:               0000:0000:0000:ffff:xxxx:xxxx:xxxx, RoCE v2
> >                                 ::ffff:192.170.1.101
> >
> Due to lack of support of GID's netdev, v1/v2 type info in ibv_devinfo output, most users that I know of are using non upstream show_gids script.
> So changing format here shouldn't break the existing users scripts.
> There may be some scripts that may find this format different.
> So I think printing both is likely a more safer option.

I don't understand this argument. Output from example tool (ibv_devinfo)
inside libibverbs can't be considered API and we can't live in constant
fear that some user script will break. Of course, we will try to keep it
stable, but there is no such promise.

Thanks

>
> > Lets also supress the 'IB/RoCE v1' string on !roce device. IB only has one GID
> > type, there is no reason to print anything
> >
> > Jason
Parav Pandit Feb. 4, 2020, 7:25 a.m. UTC | #10
Hi Leon,

> From: Leon Romanovsky <leon@kernel.org>
> Sent: Tuesday, February 4, 2020 12:48 PM
> 
> On Tue, Feb 04, 2020 at 04:27:45AM +0000, Parav Pandit wrote:
> >
> >
> > > From: Jason Gunthorpe <jgg@mellanox.com>
> > > Sent: Monday, February 3, 2020 11:34 PM
> > >
> > > On Mon, Feb 03, 2020 at 11:31:06PM +0530, Devesh Sharma wrote:
> > > > On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com>
> > > wrote:
> > > > >
> > > > > On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> > > > > >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> > > > > >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> > > > > >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> > > > >
> > > > > v1 GIDs are GIDs and should never be formed as IPv6 addreses..
> > > > So, V1 gids would fall back to old style of display and there will
> > > > be one more check for gid-type inside the loop...
> > >
> > > Yes
> > >
> > > Parav should we show both the v6 and classic format for a v2 GID? ie
> > >
> > >         GID[  3]:               0000:0000:0000:ffff:xxxx:xxxx:xxxx, RoCE v2
> > >                                 ::ffff:192.170.1.101
> > >
> > Due to lack of support of GID's netdev, v1/v2 type info in ibv_devinfo output,
> most users that I know of are using non upstream show_gids script.
> > So changing format here shouldn't break the existing users scripts.
> > There may be some scripts that may find this format different.
> > So I think printing both is likely a more safer option.
> 
> I don't understand this argument. Output from example tool (ibv_devinfo)
> inside libibverbs can't be considered API and we can't live in constant fear that
> some user script will break. Of course, we will try to keep it stable, but there is
> no such promise.
> 
I agree with your point that ibv_devinfo output is not an API.
I haven't come across a user who uses ibv_devinfo output as an API given lack of info in it.
I really do not have any strong opinion to keep both format or single format.
Devesh Sharma Feb. 4, 2020, 8:44 a.m. UTC | #11
On Tue, Feb 4, 2020 at 12:55 PM Parav Pandit <parav@mellanox.com> wrote:
>
> Hi Leon,
>
> > From: Leon Romanovsky <leon@kernel.org>
> > Sent: Tuesday, February 4, 2020 12:48 PM
> >
> > On Tue, Feb 04, 2020 at 04:27:45AM +0000, Parav Pandit wrote:
> > >
> > >
> > > > From: Jason Gunthorpe <jgg@mellanox.com>
> > > > Sent: Monday, February 3, 2020 11:34 PM
> > > >
> > > > On Mon, Feb 03, 2020 at 11:31:06PM +0530, Devesh Sharma wrote:
> > > > > On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com>
> > > > wrote:
> > > > > >
> > > > > > On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> > > > > > >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> > > > > > >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> > > > > > >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> > > > > >
> > > > > > v1 GIDs are GIDs and should never be formed as IPv6 addreses..
> > > > > So, V1 gids would fall back to old style of display and there will
> > > > > be one more check for gid-type inside the loop...
> > > >
> > > > Yes
> > > >
> > > > Parav should we show both the v6 and classic format for a v2 GID? ie
> > > >
> > > >         GID[  3]:               0000:0000:0000:ffff:xxxx:xxxx:xxxx, RoCE v2
> > > >                                 ::ffff:192.170.1.101
> > > >
> > > Due to lack of support of GID's netdev, v1/v2 type info in ibv_devinfo output,
> > most users that I know of are using non upstream show_gids script.
> > > So changing format here shouldn't break the existing users scripts.
> > > There may be some scripts that may find this format different.
> > > So I think printing both is likely a more safer option.
> >
> > I don't understand this argument. Output from example tool (ibv_devinfo)
> > inside libibverbs can't be considered API and we can't live in constant fear that
> > some user script will break. Of course, we will try to keep it stable, but there is
> > no such promise.
> >
> I agree with your point that ibv_devinfo output is not an API.
> I haven't come across a user who uses ibv_devinfo output as an API given lack of info in it.
> I really do not have any strong opinion to keep both format or single format.

To it looks dirty, if the tool would print both things would look
something like:
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[  1]:               fe80::b226:28ff:fed3:b0f0
                        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
                        GID[  3]:               ::ffff:192.170.1.101
Devesh Sharma Feb. 4, 2020, 8:50 a.m. UTC | #12
On Tue, Feb 4, 2020 at 2:14 PM Devesh Sharma <devesh.sharma@broadcom.com> wrote:
>
> On Tue, Feb 4, 2020 at 12:55 PM Parav Pandit <parav@mellanox.com> wrote:
> >
> > Hi Leon,
> >
> > > From: Leon Romanovsky <leon@kernel.org>
> > > Sent: Tuesday, February 4, 2020 12:48 PM
> > >
> > > On Tue, Feb 04, 2020 at 04:27:45AM +0000, Parav Pandit wrote:
> > > >
> > > >
> > > > > From: Jason Gunthorpe <jgg@mellanox.com>
> > > > > Sent: Monday, February 3, 2020 11:34 PM
> > > > >
> > > > > On Mon, Feb 03, 2020 at 11:31:06PM +0530, Devesh Sharma wrote:
> > > > > > On Mon, Feb 3, 2020 at 11:23 PM Jason Gunthorpe <jgg@mellanox.com>
> > > > > wrote:
> > > > > > >
> > > > > > > On Mon, Feb 03, 2020 at 12:52:04PM -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::b226:28ff:fed3:b0f0, IB/RoCE v1
> > > > > > > >        GID[  1]:               fe80::b226:28ff:fed3:b0f0, RoCE v2
> > > > > > > >        GID[  2]:               ::ffff:192.170.1.101, IB/RoCE v1
> > > > > > > >        GID[  3]:               ::ffff:192.170.1.101, RoCE v2
> > > > > > >
> > > > > > > v1 GIDs are GIDs and should never be formed as IPv6 addreses..
> > > > > > So, V1 gids would fall back to old style of display and there will
> > > > > > be one more check for gid-type inside the loop...
> > > > >
> > > > > Yes
> > > > >
> > > > > Parav should we show both the v6 and classic format for a v2 GID? ie
> > > > >
> > > > >         GID[  3]:               0000:0000:0000:ffff:xxxx:xxxx:xxxx, RoCE v2
> > > > >                                 ::ffff:192.170.1.101
> > > > >
> > > > Due to lack of support of GID's netdev, v1/v2 type info in ibv_devinfo output,
> > > most users that I know of are using non upstream show_gids script.
> > > > So changing format here shouldn't break the existing users scripts.
> > > > There may be some scripts that may find this format different.
> > > > So I think printing both is likely a more safer option.
> > >
> > > I don't understand this argument. Output from example tool (ibv_devinfo)
> > > inside libibverbs can't be considered API and we can't live in constant fear that
> > > some user script will break. Of course, we will try to keep it stable, but there is
> > > no such promise.
> > >
> > I agree with your point that ibv_devinfo output is not an API.
> > I haven't come across a user who uses ibv_devinfo output as an API given lack of info in it.
> > I really do not have any strong opinion to keep both format or single format.
>
> To it looks dirty, if the tool would print both things would look
> something like:
> 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[  1]:               fe80::b226:28ff:fed3:b0f0
>                         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
>                         GID[  3]:               ::ffff:192.170.1.101

Re-post with re-formating:
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[  1]: fe80::b226:28ff:fed3:b0f0
                        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
                        GID[  3]: ::ffff:192.170.1.101
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..568712c 100644
--- a/libibverbs/examples/devinfo.c
+++ b/libibverbs/examples/devinfo.c
@@ -40,6 +40,7 @@ 
 #include <getopt.h>
 #include <endian.h>
 #include <inttypes.h>
+#include <arpa/inet.h>
 
 #include <infiniband/verbs.h>
 #include <infiniband/driver.h>
@@ -162,8 +163,19 @@  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)
 {
+	char gid_str[INET6_ADDRSTRLEN] = {};
+	enum ibv_gid_type type;
 	union ibv_gid gid;
 	int rc = 0;
 	int i;
@@ -175,17 +187,18 @@  static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tb
 			       port_num, i);
 			return rc;
 		}
-		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",
-			       i,
-			       gid.raw[ 0], gid.raw[ 1],
-			       gid.raw[ 2], gid.raw[ 3],
-			       gid.raw[ 4], gid.raw[ 5],
-			       gid.raw[ 6], gid.raw[ 7],
-			       gid.raw[ 8], gid.raw[ 9],
-			       gid.raw[10], gid.raw[11],
-			       gid.raw[12], gid.raw[13],
-			       gid.raw[14], gid.raw[15]);
+
+		rc = ibv_query_gid_type(ctx, port_num, i, &type);
+		if (rc) {
+			rc = 0;
+			type = IBV_GID_TYPE_INVALID;
+		}
+
+		if (!null_gid(&gid)) {
+			inet_ntop(AF_INET6, gid.raw, gid_str, sizeof(gid_str));
+			printf("\t\t\tGID[%3d]:\t\t%s, %s\n", i, gid_str,
+			       gid_type_str(type));
+		}
 	}
 	return rc;
 }