diff mbox series

[iproute2-next] bash-completion: devlink: fix port param name show completion

Message ID 20241115055848.2979328-1-saeed@kernel.org (mailing list archive)
State Deferred
Delegated to: Stephen Hemminger
Headers show
Series [iproute2-next] bash-completion: devlink: fix port param name show completion | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch

Commit Message

Saeed Mahameed Nov. 15, 2024, 5:58 a.m. UTC
From: Saeed Mahameed <saeedm@nvidia.com>

Port param names are found with "devlink port param show", and not
"devlink param show", fix that.

Port dev name can be a netdev, so find the actual port dev before
querying "devlink port params show | jq '... [$dev] ...'",
since "devlink port params show" doesn't return the netdev name,
but the actual port dev name.

Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
---
 bash-completion/devlink | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

Comments

Jiri Pirko Nov. 15, 2024, 12:58 p.m. UTC | #1
Fri, Nov 15, 2024 at 06:58:48AM CET, saeed@kernel.org wrote:
>From: Saeed Mahameed <saeedm@nvidia.com>
>
>Port param names are found with "devlink port param show", and not
>"devlink param show", fix that.
>
>Port dev name can be a netdev, so find the actual port dev before
>querying "devlink port params show | jq '... [$dev] ...'",
>since "devlink port params show" doesn't return the netdev name,
>but the actual port dev name.
>
>Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
>---
> bash-completion/devlink | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
>diff --git a/bash-completion/devlink b/bash-completion/devlink
>index 52dc82b3..ac5ea62c 100644
>--- a/bash-completion/devlink
>+++ b/bash-completion/devlink
>@@ -43,6 +43,15 @@ _devlink_direct_complete()
>             value=$(devlink -j dev param show 2>/dev/null \
>                     | jq ".param[\"$dev\"][].name")
>             ;;
>+        port_param_name)
>+            dev=${words[4]}
>+            # dev could be a port or a netdev so find the port
>+            portdev=$(devlink -j port show dev $dev 2>/dev/null \
>+                    | jq '.port as $ports | $ports | keys[] as $keys | keys[0] ')
>+
>+            value=$(devlink -j port param show 2>/dev/null \

As you only care about params for specific port, you should pass it as
cmdline option here. And you can pass netdev directly, devlink knows how
to handle that. If I'm not missing anything in the code, should work
right now.


>+                    | jq ".param[$portdev][].name")
>+            ;;
>         port)
>             value=$(devlink -j port show 2>/dev/null \
>                     | jq '.port as $ports | $ports | keys[] as $key
>@@ -401,7 +410,7 @@ _devlink_port_param()
>             return
>             ;;
>         6)
>-            _devlink_direct_complete "param_name"
>+            _devlink_direct_complete "port_param_name"
>             return
>             ;;
>     esac
>-- 
>2.47.0
>
Saeed Mahameed Nov. 15, 2024, 6:44 p.m. UTC | #2
On 15 Nov 13:58, Jiri Pirko wrote:
>Fri, Nov 15, 2024 at 06:58:48AM CET, saeed@kernel.org wrote:
>>From: Saeed Mahameed <saeedm@nvidia.com>
>>
>>Port param names are found with "devlink port param show", and not
>>"devlink param show", fix that.
>>
>>Port dev name can be a netdev, so find the actual port dev before
>>querying "devlink port params show | jq '... [$dev] ...'",
>>since "devlink port params show" doesn't return the netdev name,
>>but the actual port dev name.
>>
>>Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
>>---
>> bash-completion/devlink | 11 ++++++++++-
>> 1 file changed, 10 insertions(+), 1 deletion(-)
>>
>>diff --git a/bash-completion/devlink b/bash-completion/devlink
>>index 52dc82b3..ac5ea62c 100644
>>--- a/bash-completion/devlink
>>+++ b/bash-completion/devlink
>>@@ -43,6 +43,15 @@ _devlink_direct_complete()
>>             value=$(devlink -j dev param show 2>/dev/null \
>>                     | jq ".param[\"$dev\"][].name")
>>             ;;
>>+        port_param_name)
>>+            dev=${words[4]}
>>+            # dev could be a port or a netdev so find the port
>>+            portdev=$(devlink -j port show dev $dev 2>/dev/null \
>>+                    | jq '.port as $ports | $ports | keys[] as $keys | keys[0] ')
>>+
>>+            value=$(devlink -j port param show 2>/dev/null \
>
>As you only care about params for specific port, you should pass it as
>cmdline option here. And you can pass netdev directly, devlink knows how
>to handle that. If I'm not missing anything in the code, should work
>right now.
>

Nope doesn't work:

$ devlink -j port param show mlx5_1
Parameter name expected.

$ devlink -j port param show auxiliary/mlx5_core.eth.0/65535
Parameter name expected.

>
>>+                    | jq ".param[$portdev][].name")
>>+            ;;
>>         port)
>>             value=$(devlink -j port show 2>/dev/null \
>>                     | jq '.port as $ports | $ports | keys[] as $key
>>@@ -401,7 +410,7 @@ _devlink_port_param()
>>             return
>>             ;;
>>         6)
>>-            _devlink_direct_complete "param_name"
>>+            _devlink_direct_complete "port_param_name"
>>             return
>>             ;;
>>     esac
>>--
>>2.47.0
>>
Jiri Pirko Nov. 16, 2024, 7:58 a.m. UTC | #3
Fri, Nov 15, 2024 at 07:44:01PM CET, saeedm@nvidia.com wrote:
>On 15 Nov 13:58, Jiri Pirko wrote:
>> Fri, Nov 15, 2024 at 06:58:48AM CET, saeed@kernel.org wrote:
>> > From: Saeed Mahameed <saeedm@nvidia.com>
>> > 
>> > Port param names are found with "devlink port param show", and not
>> > "devlink param show", fix that.
>> > 
>> > Port dev name can be a netdev, so find the actual port dev before
>> > querying "devlink port params show | jq '... [$dev] ...'",
>> > since "devlink port params show" doesn't return the netdev name,
>> > but the actual port dev name.
>> > 
>> > Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
>> > ---
>> > bash-completion/devlink | 11 ++++++++++-
>> > 1 file changed, 10 insertions(+), 1 deletion(-)
>> > 
>> > diff --git a/bash-completion/devlink b/bash-completion/devlink
>> > index 52dc82b3..ac5ea62c 100644
>> > --- a/bash-completion/devlink
>> > +++ b/bash-completion/devlink
>> > @@ -43,6 +43,15 @@ _devlink_direct_complete()
>> >             value=$(devlink -j dev param show 2>/dev/null \
>> >                     | jq ".param[\"$dev\"][].name")
>> >             ;;
>> > +        port_param_name)
>> > +            dev=${words[4]}
>> > +            # dev could be a port or a netdev so find the port
>> > +            portdev=$(devlink -j port show dev $dev 2>/dev/null \
>> > +                    | jq '.port as $ports | $ports | keys[] as $keys | keys[0] ')
>> > +
>> > +            value=$(devlink -j port param show 2>/dev/null \
>> 
>> As you only care about params for specific port, you should pass it as
>> cmdline option here. And you can pass netdev directly, devlink knows how
>> to handle that. If I'm not missing anything in the code, should work
>> right now.
>> 
>
>Nope doesn't work:
>
>$ devlink -j port param show mlx5_1
>Parameter name expected.
>
>$ devlink -j port param show auxiliary/mlx5_core.eth.0/65535
>Parameter name expected.

Okay, so fix it :)


>
>> 
>> > +                    | jq ".param[$portdev][].name")
>> > +            ;;
>> >         port)
>> >             value=$(devlink -j port show 2>/dev/null \
>> >                     | jq '.port as $ports | $ports | keys[] as $key
>> > @@ -401,7 +410,7 @@ _devlink_port_param()
>> >             return
>> >             ;;
>> >         6)
>> > -            _devlink_direct_complete "param_name"
>> > +            _devlink_direct_complete "port_param_name"
>> >             return
>> >             ;;
>> >     esac
>> > --
>> > 2.47.0
>> >
Stephen Hemminger Nov. 19, 2024, 4:45 p.m. UTC | #4
On Sat, 16 Nov 2024 08:58:05 +0100
Jiri Pirko <jiri@resnulli.us> wrote:

> Fri, Nov 15, 2024 at 07:44:01PM CET, saeedm@nvidia.com wrote:
> >On 15 Nov 13:58, Jiri Pirko wrote:  
> >> Fri, Nov 15, 2024 at 06:58:48AM CET, saeed@kernel.org wrote:  
> >> > From: Saeed Mahameed <saeedm@nvidia.com>
> >> > 
> >> > Port param names are found with "devlink port param show", and not
> >> > "devlink param show", fix that.
> >> > 
> >> > Port dev name can be a netdev, so find the actual port dev before
> >> > querying "devlink port params show | jq '... [$dev] ...'",
> >> > since "devlink port params show" doesn't return the netdev name,
> >> > but the actual port dev name.
> >> > 
> >> > Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
> >> > ---
> >> > bash-completion/devlink | 11 ++++++++++-
> >> > 1 file changed, 10 insertions(+), 1 deletion(-)
> >> > 
> >> > diff --git a/bash-completion/devlink b/bash-completion/devlink
> >> > index 52dc82b3..ac5ea62c 100644
> >> > --- a/bash-completion/devlink
> >> > +++ b/bash-completion/devlink
> >> > @@ -43,6 +43,15 @@ _devlink_direct_complete()
> >> >             value=$(devlink -j dev param show 2>/dev/null \
> >> >                     | jq ".param[\"$dev\"][].name")
> >> >             ;;
> >> > +        port_param_name)
> >> > +            dev=${words[4]}
> >> > +            # dev could be a port or a netdev so find the port
> >> > +            portdev=$(devlink -j port show dev $dev 2>/dev/null \
> >> > +                    | jq '.port as $ports | $ports | keys[] as $keys | keys[0] ')
> >> > +
> >> > +            value=$(devlink -j port param show 2>/dev/null \  
> >> 
> >> As you only care about params for specific port, you should pass it as
> >> cmdline option here. And you can pass netdev directly, devlink knows how
> >> to handle that. If I'm not missing anything in the code, should work
> >> right now.
> >>   
> >
> >Nope doesn't work:
> >
> >$ devlink -j port param show mlx5_1
> >Parameter name expected.
> >
> >$ devlink -j port param show auxiliary/mlx5_core.eth.0/65535
> >Parameter name expected.  
> 
> Okay, so fix it :)

Holding off on applying this until some conclusion is reached.
diff mbox series

Patch

diff --git a/bash-completion/devlink b/bash-completion/devlink
index 52dc82b3..ac5ea62c 100644
--- a/bash-completion/devlink
+++ b/bash-completion/devlink
@@ -43,6 +43,15 @@  _devlink_direct_complete()
             value=$(devlink -j dev param show 2>/dev/null \
                     | jq ".param[\"$dev\"][].name")
             ;;
+        port_param_name)
+            dev=${words[4]}
+            # dev could be a port or a netdev so find the port
+            portdev=$(devlink -j port show dev $dev 2>/dev/null \
+                    | jq '.port as $ports | $ports | keys[] as $keys | keys[0] ')
+
+            value=$(devlink -j port param show 2>/dev/null \
+                    | jq ".param[$portdev][].name")
+            ;;
         port)
             value=$(devlink -j port show 2>/dev/null \
                     | jq '.port as $ports | $ports | keys[] as $key
@@ -401,7 +410,7 @@  _devlink_port_param()
             return
             ;;
         6)
-            _devlink_direct_complete "param_name"
+            _devlink_direct_complete "port_param_name"
             return
             ;;
     esac