All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aaron Conole <aconole@redhat.com>
To: "Adrián Moreno" <amorenoz@redhat.com>
Cc: netdev@vger.kernel.org,  Pravin B Shelar <pshelar@ovn.org>,
	 "David S. Miller" <davem@davemloft.net>,
	 Eric Dumazet <edumazet@google.com>,
	 Jakub Kicinski <kuba@kernel.org>,
	 Paolo Abeni <pabeni@redhat.com>,  Shuah Khan <shuah@kernel.org>,
	 dev@openvswitch.org, linux-kselftest@vger.kernel.org,
	 linux-kernel@vger.kernel.org,  Simon Horman <horms@verge.net.au>
Subject: Re: [PATCH net-next 1/2] selftests: openvswitch: fix action formatting
Date: Tue, 11 Jun 2024 10:04:14 -0400	[thread overview]
Message-ID: <f7tsexjpodd.fsf@redhat.com> (raw)
In-Reply-To: <CAG=2xmNU4i5LwrfaSBNKODyOaR0OqVdxX3B5xhkrkNQX2v=S3Q@mail.gmail.com> ("Adrián Moreno"'s message of "Thu, 6 Jun 2024 09:05:01 +0000")

Adrián Moreno <amorenoz@redhat.com> writes:

> On Mon, Jun 03, 2024 at 03:00:03PM GMT, Aaron Conole wrote:
>> Adrian Moreno <amorenoz@redhat.com> writes:
>>
>> > In the action formatting function ("dpstr"), the iteration is made over
>> > the nla_map, so if there are more than one attribute from the same type
>> > we only print the first one.
>> >
>> > Fix this by iterating over the actual attributes.
>> >
>> > Signed-off-by: Adrian Moreno <amorenoz@redhat.com>
>> > ---
>> >  .../selftests/net/openvswitch/ovs-dpctl.py    | 48 +++++++++++--------
>> >  1 file changed, 27 insertions(+), 21 deletions(-)
>> >
>> > diff --git a/tools/testing/selftests/net/openvswitch/ovs-dpctl.py b/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
>> > index 1dd057afd3fb..b76907ac0092 100644
>> > --- a/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
>> > +++ b/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
>> > @@ -437,40 +437,46 @@ class ovsactions(nla):
>> >      def dpstr(self, more=False):
>> >          print_str = ""
>> >
>> > -        for field in self.nla_map:
>> > -            if field[1] == "none" or self.get_attr(field[0]) is None:
>> > +        for attr_name, value in self["attrs"]:
>> > +            attr_desc = next(filter(lambda x: x[0] == attr_name, self.nla_map),
>> > +                             None)
>> > +            if not attr_desc:
>> > +                raise ValueError("Unknown attribute: %s" % attr)
>> > +
>> > +            attr_type = attr_desc[1]
>> > +
>> > +            if attr_type == "none":
>>
>> I agree, this is an issue.  BUT I think it might be better to just
>> filter by field type up front.  See:
>>
>> https://github.com/apconole/linux-next-work/commit/7262107de7170d44b6dbf6c5ea6f7e6c0bb71d36#diff-3e72e7405c6bb4e9842bed5f63883ca930387086bb40d4034e92ed83a5decb4bR441
>>
>> That version I think ends up being much easier to follow.  If you want
>> to take it for your series, feel free.  If you disagree, maybe there's
>> something I'm not considering about it.
>>
>
> I agree. It's better to check field attribute names first. I found this
> during manual testing of the "emit_sample" series but I ended up not
> needing it for the automated one, so I'm OK waiting for your cleanup
> series.

I'll get stuff out this week for it.

> In fact, I also have some patches that try some rework of this part. In
> particular, I tried to unify all attributes under a common base class
> that would handle printing and parsing. That way, most cases would fall
> into "print_str += datum.dpstr(more)" and the "if/elif" block would
> shrink significantly.

That sounds very good.

>> NOTE that version is just a bunch of independent changes that are
>> squashed together.  I have a cleaner version.
>>
>> I can also bundle up the series I have so far and submit, but I didn't
>> want to do that until I got all the pmtu.sh support working.  Maybe it
>> makes sense to send it now though.  Simon, Jakub - wdyt?
>>
>> >                  continue
>> >              if print_str != "":
>> >                  print_str += ","
>> >
>> > -            if field[1] == "uint32":
>> > -                if field[0] == "OVS_ACTION_ATTR_OUTPUT":
>> > -                    print_str += "%d" % int(self.get_attr(field[0]))
>> > -                elif field[0] == "OVS_ACTION_ATTR_RECIRC":
>> > -                    print_str += "recirc(0x%x)" % int(self.get_attr(field[0]))
>> > -                elif field[0] == "OVS_ACTION_ATTR_TRUNC":
>> > -                    print_str += "trunc(%d)" % int(self.get_attr(field[0]))
>> > -                elif field[0] == "OVS_ACTION_ATTR_DROP":
>> > -                    print_str += "drop(%d)" % int(self.get_attr(field[0]))
>> > -            elif field[1] == "flag":
>> > -                if field[0] == "OVS_ACTION_ATTR_CT_CLEAR":
>> > +            if attr_type == "uint32":
>> > +                if attr_name == "OVS_ACTION_ATTR_OUTPUT":
>> > +                    print_str += "%d" % int(value)
>> > +                elif attr_name == "OVS_ACTION_ATTR_RECIRC":
>> > +                    print_str += "recirc(0x%x)" % int(value)
>> > +                elif attr_name == "OVS_ACTION_ATTR_TRUNC":
>> > +                    print_str += "trunc(%d)" % int(value)
>> > +                elif attr_name == "OVS_ACTION_ATTR_DROP":
>> > +                    print_str += "drop(%d)" % int(value)
>> > +            elif attr_type == "flag":
>> > +                if attr_name == "OVS_ACTION_ATTR_CT_CLEAR":
>> >                      print_str += "ct_clear"
>> > -                elif field[0] == "OVS_ACTION_ATTR_POP_VLAN":
>> > +                elif attr_name == "OVS_ACTION_ATTR_POP_VLAN":
>> >                      print_str += "pop_vlan"
>> > -                elif field[0] == "OVS_ACTION_ATTR_POP_ETH":
>> > +                elif attr_name == "OVS_ACTION_ATTR_POP_ETH":
>> >                      print_str += "pop_eth"
>> > -                elif field[0] == "OVS_ACTION_ATTR_POP_NSH":
>> > +                elif attr_name == "OVS_ACTION_ATTR_POP_NSH":
>> >                      print_str += "pop_nsh"
>> > -                elif field[0] == "OVS_ACTION_ATTR_POP_MPLS":
>> > +                elif attr_name == "OVS_ACTION_ATTR_POP_MPLS":
>> >                      print_str += "pop_mpls"
>> >              else:
>> > -                datum = self.get_attr(field[0])
>> > -                if field[0] == "OVS_ACTION_ATTR_CLONE":
>> > +                if attr_name == "OVS_ACTION_ATTR_CLONE":
>> >                      print_str += "clone("
>> > -                    print_str += datum.dpstr(more)
>> > +                    print_str += value.dpstr(more)
>> >                      print_str += ")"
>> >                  else:
>> > -                    print_str += datum.dpstr(more)
>> > +                    print_str += value.dpstr(more)
>> >
>> >          return print_str
>>


      reply	other threads:[~2024-06-11 14:04 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-03 18:31 [PATCH net-next 1/2] selftests: openvswitch: fix action formatting Adrian Moreno
2024-06-03 18:31 ` [PATCH net-next 2/2] selftests: openvswitch: set value to nla flags Adrian Moreno
2024-06-03 19:02   ` Aaron Conole
2024-06-11 15:03     ` Adrián Moreno
2024-06-14 15:54       ` Aaron Conole
2024-06-03 19:00 ` [PATCH net-next 1/2] selftests: openvswitch: fix action formatting Aaron Conole
2024-06-04  0:15   ` Jakub Kicinski
2024-06-06  9:05   ` Adrián Moreno
2024-06-11 14:04     ` Aaron Conole [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f7tsexjpodd.fsf@redhat.com \
    --to=aconole@redhat.com \
    --cc=amorenoz@redhat.com \
    --cc=davem@davemloft.net \
    --cc=dev@openvswitch.org \
    --cc=edumazet@google.com \
    --cc=horms@verge.net.au \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=pshelar@ovn.org \
    --cc=shuah@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.