diff mbox series

[ovs-dev,net-next] net: ovs: fix ovs_drop_reasons error

Message ID 20240815122245.975440-1-dongml2@chinatelecom.cn
State Handled Elsewhere
Headers show
Series [ovs-dev,net-next] net: ovs: fix ovs_drop_reasons error | expand

Commit Message

Menglong Dong Aug. 15, 2024, 12:22 p.m. UTC
I'm sure if I understand it correctly, but it seems that there is
something wrong with ovs_drop_reasons.

ovs_drop_reasons[0] is "OVS_DROP_LAST_ACTION", but
OVS_DROP_LAST_ACTION == __OVS_DROP_REASON + 1, which means that
ovs_drop_reasons[1] should be "OVS_DROP_LAST_ACTION".

Fix this by initializing ovs_drop_reasons with index.

Fixes: 9d802da40b7c ("net: openvswitch: add last-action drop reason")
Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
---
 net/openvswitch/datapath.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jakub Kicinski Aug. 17, 2024, 1:01 a.m. UTC | #1
On Thu, 15 Aug 2024 20:22:45 +0800 Menglong Dong wrote:
> I'm sure if I understand it correctly, but it seems that there is
> something wrong with ovs_drop_reasons.
> 
> ovs_drop_reasons[0] is "OVS_DROP_LAST_ACTION", but
> OVS_DROP_LAST_ACTION == __OVS_DROP_REASON + 1, which means that
> ovs_drop_reasons[1] should be "OVS_DROP_LAST_ACTION".
> 
> Fix this by initializing ovs_drop_reasons with index.
> 
> Fixes: 9d802da40b7c ("net: openvswitch: add last-action drop reason")
> Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>

Could you include output? Presumably from drop monitor?
I think it should go to net rather than net-next.
Menglong Dong Aug. 17, 2024, 11:36 a.m. UTC | #2
On Sat, Aug 17, 2024 at 9:01 AM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Thu, 15 Aug 2024 20:22:45 +0800 Menglong Dong wrote:
> > I'm sure if I understand it correctly, but it seems that there is
> > something wrong with ovs_drop_reasons.
> >
> > ovs_drop_reasons[0] is "OVS_DROP_LAST_ACTION", but
> > OVS_DROP_LAST_ACTION == __OVS_DROP_REASON + 1, which means that
> > ovs_drop_reasons[1] should be "OVS_DROP_LAST_ACTION".
> >
> > Fix this by initializing ovs_drop_reasons with index.
> >
> > Fixes: 9d802da40b7c ("net: openvswitch: add last-action drop reason")
> > Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
>
> Could you include output? Presumably from drop monitor?
> I think it should go to net rather than net-next.

I have not tested it yet. I just copy all the code for drop reason
subsystem from openvswitch to vxlan, and this happens in
the vxlan code.

I'm on vacation right now, and I'll test it out next Monday.

Thanks!
Menglong Dong

> --
> pw-bot: cr
Menglong Dong Aug. 18, 2024, 3:35 a.m. UTC | #3
On Sat, Aug 17, 2024 at 9:01 AM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Thu, 15 Aug 2024 20:22:45 +0800 Menglong Dong wrote:
> > I'm sure if I understand it correctly, but it seems that there is
> > something wrong with ovs_drop_reasons.
> >
> > ovs_drop_reasons[0] is "OVS_DROP_LAST_ACTION", but
> > OVS_DROP_LAST_ACTION == __OVS_DROP_REASON + 1, which means that
> > ovs_drop_reasons[1] should be "OVS_DROP_LAST_ACTION".
> >
> > Fix this by initializing ovs_drop_reasons with index.
> >
> > Fixes: 9d802da40b7c ("net: openvswitch: add last-action drop reason")
> > Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
>
> Could you include output? Presumably from drop monitor?

I think I'm right. I'm not familiar with ovs, and it's hard to
create a drop case for me. So, I did some modification to
ovs_vport_receive link this:

@@ -510,6 +511,9 @@ int ovs_vport_receive(struct vport *vport, struct
sk_buff *skb,
                tun_info = NULL;
        }

+       ovs_kfree_skb_reason(skb, OVS_DROP_LAST_ACTION);
+       return -ENOMEM;
+
        /* Extract flow from 'skb' into 'key'. */
        error = ovs_flow_key_extract(tun_info, skb, &key);
        if (unlikely(error)) {

In the drop watch, I can have the output like this:

drop at: ovs_vport_receive+0x78/0xc0 [openvswitc (0xffffffffc068fa78)
origin: software
input port ifindex: 18
timestamp: Sun Aug 18 03:28:00 2024 142999108 nsec
protocol: 0x86dd
length: 70
original length: 70
drop reason: OVS_DROP_ACTION_ERROR

Obviously, the output is wrong, just like what I suspect.

> I think it should go to net rather than net-next.

Should I resend this patch to the net branch?

Thanks!
Menglong Dong

> --
> pw-bot: cr
Jakub Kicinski Aug. 19, 2024, 10:56 p.m. UTC | #4
On Sun, 18 Aug 2024 11:35:48 +0800 Menglong Dong wrote:
> > I think it should go to net rather than net-next.  
> 
> Should I resend this patch to the net branch?

Yes please! And with the results of your experiment added to the commit
message.
Adrián Moreno Aug. 20, 2024, 2:23 p.m. UTC | #5
On Thu, Aug 15, 2024 at 08:22:45PM GMT, Menglong Dong wrote:
> I'm sure if I understand it correctly, but it seems that there is
> something wrong with ovs_drop_reasons.
>
> ovs_drop_reasons[0] is "OVS_DROP_LAST_ACTION", but
> OVS_DROP_LAST_ACTION == __OVS_DROP_REASON + 1, which means that
> ovs_drop_reasons[1] should be "OVS_DROP_LAST_ACTION".
>
> Fix this by initializing ovs_drop_reasons with index.
>
> Fixes: 9d802da40b7c ("net: openvswitch: add last-action drop reason")
> Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>

The patch looks good to me. Also, tested and verified that,
without the patch, adding flow to drop packets results in:

drop at: do_execute_actions+0x197/0xb20 [openvsw (0xffffffffc0db6f97)
origin: software
input port ifindex: 8
timestamp: Tue Aug 20 10:19:17 2024 859853461 nsec
protocol: 0x800
length: 98
original length: 98
drop reason: OVS_DROP_ACTION_ERROR

With the patch, the same results in:

drop at: do_execute_actions+0x197/0xb20 [openvsw (0xffffffffc0db6f97)
origin: software
input port ifindex: 8
timestamp: Tue Aug 20 10:16:13 2024 475856608 nsec
protocol: 0x800
length: 98
original length: 98
drop reason: OVS_DROP_LAST_ACTION

Tested-by: Adrian Moreno <amorenoz@redhat.com>
Reviewed-by: Adrian Moreno <amorenoz@redhat.com>
Menglong Dong Aug. 21, 2024, 11:59 a.m. UTC | #6
On Tue, Aug 20, 2024 at 10:23 PM Adrián Moreno <amorenoz@redhat.com> wrote:
>
> On Thu, Aug 15, 2024 at 08:22:45PM GMT, Menglong Dong wrote:
> > I'm sure if I understand it correctly, but it seems that there is
> > something wrong with ovs_drop_reasons.
> >
> > ovs_drop_reasons[0] is "OVS_DROP_LAST_ACTION", but
> > OVS_DROP_LAST_ACTION == __OVS_DROP_REASON + 1, which means that
> > ovs_drop_reasons[1] should be "OVS_DROP_LAST_ACTION".
> >
> > Fix this by initializing ovs_drop_reasons with index.
> >
> > Fixes: 9d802da40b7c ("net: openvswitch: add last-action drop reason")
> > Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
>
> The patch looks good to me. Also, tested and verified that,
> without the patch, adding flow to drop packets results in:
>
> drop at: do_execute_actions+0x197/0xb20 [openvsw (0xffffffffc0db6f97)
> origin: software
> input port ifindex: 8
> timestamp: Tue Aug 20 10:19:17 2024 859853461 nsec
> protocol: 0x800
> length: 98
> original length: 98
> drop reason: OVS_DROP_ACTION_ERROR
>
> With the patch, the same results in:
>
> drop at: do_execute_actions+0x197/0xb20 [openvsw (0xffffffffc0db6f97)
> origin: software
> input port ifindex: 8
> timestamp: Tue Aug 20 10:16:13 2024 475856608 nsec
> protocol: 0x800
> length: 98
> original length: 98
> drop reason: OVS_DROP_LAST_ACTION
>
> Tested-by: Adrian Moreno <amorenoz@redhat.com>
> Reviewed-by: Adrian Moreno <amorenoz@redhat.com>
>

Thanks! I'll resend this patch to the net branch
with your testing.
diff mbox series

Patch

diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 99d72543abd3..249210958f0b 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -2706,7 +2706,7 @@  static struct pernet_operations ovs_net_ops = {
 };
 
 static const char * const ovs_drop_reasons[] = {
-#define S(x)	(#x),
+#define S(x)	[(x) & ~SKB_DROP_REASON_SUBSYS_MASK] = (#x),
 	OVS_DROP_REASONS(S)
 #undef S
 };