DPDK-dev Archive mirror
 help / color / mirror / Atom feed
From: bugzilla@dpdk.org
To: dev@dpdk.org
Subject: [DPDK/examples Bug 1434] l3fwd: crashes in ACL mode for mixed traffic
Date: Thu, 02 May 2024 14:16:49 +0000	[thread overview]
Message-ID: <bug-1434-3@http.bugs.dpdk.org/> (raw)

[-- Attachment #1: Type: text/plain, Size: 4427 bytes --]

https://bugs.dpdk.org/show_bug.cgi?id=1434

            Bug ID: 1434
           Summary: l3fwd: crashes in ACL mode for mixed traffic
           Product: DPDK
           Version: 24.03
          Hardware: All
                OS: All
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: examples
          Assignee: dev@dpdk.org
          Reporter: konstantin.v.ananyev@yandex.ru
  Target Milestone: ---

When running l3fwd in ACL mode, if we'll have mix of IPv4/IPv6 packets in the
same burst,
It will most likely cause a crash. Something like:
#0  rte_eth_tx_burst (port_id=54, queue_id=0,
    tx_pkts=0x4b249c0 <lcore_conf+550528>, nb_pkts=32)
    at ../lib/ethdev/rte_ethdev.h:6437
#1  0x0000000000503c0d in send_burst (qconf=0x4b20d40 <lcore_conf+535040>,
    n=32, port=54) at ../examples/l3fwd/l3fwd.h:129
#2  0x0000000000503ced in send_single_packet (
    qconf=0x4b20d40 <lcore_conf+535040>, m=0x11fc70ba00, port=54)
    at ../examples/l3fwd/l3fwd.h:152
#3  0x0000000000504138 in send_packets_single (
    qconf=0x4b20d40 <lcore_conf+535040>, pkts=0x7ffff2f24070,
    hops=0x7ffff2f23ab0, nb_tx=32) at ../examples/l3fwd/l3fwd_acl_scalar.h:77
#4  0x0000000000504286 in l3fwd_acl_send_packets (
    qconf=0x4b20d40 <lcore_conf+535040>, pkts=0x7ffff2f24070,
    res=0x7ffff2f23fe8, nb_tx=32) at ../examples/l3fwd/l3fwd_acl_scalar.h:106
#5  0x0000000000506870 in acl_main_loop (dummy=0x0)

#4  0x0000000000504286 in l3fwd_acl_send_packets (
    qconf=0x4b20d40 <lcore_conf+535040>, pkts=0x7ffff2f24070,
    res=0x7ffff2f23fe8, nb_tx=32) at ../examples/l3fwd/l3fwd_acl_scalar.h:106
106             send_packets_single(qconf, pkts, dst_port, nb_tx);

And the array of dst_port[] will contain some junk values:
(gdb) print dst_port
$7 = {0 <repeats 16 times>, 65535, 65535, 65535, 65535, 54, 65535, 65535,
  65535, 65535, 65535, 65535, 32766, 58445, 65535, 65535, 65535}

And the reason for that is here:

acl_main_loop(__rte_unused void *dummy)
{

...

                                if (acl_search.num_ipv4) {
                                        rte_acl_classify(
                                                acl_config.acx_ipv4[socketid],
                                                acl_search.data_ipv4,
                                                acl_search.res_ipv4,
                                                acl_search.num_ipv4,
                                                DEFAULT_MAX_CATEGORIES);
        l3fwd_acl_send_packets(
                                                qconf,
                                                pkts_burst,
                                                acl_search.res_ipv4,
                                                nb_rx);
...

I.E. we split our burst of packets into 2 arrays - one for ipv4, anoterh for
ipv6 for classify(),
But then we try to send all packets as one burst again, not taking into account
that acl_search.res_ipv4[] will be set only for ipv4 packets.
Same story for ipv6.
The fix is straightforward:
--- a/examples/l3fwd/l3fwd_acl.c
+++ b/examples/l3fwd/l3fwd_acl.c
@@ -1073,9 +1073,9 @@ acl_main_loop(__rte_unused void *dummy)

                                        l3fwd_acl_send_packets(
                                                qconf,
-                                               pkts_burst,
+                                               acl_search.m_ipv4,
                                                acl_search.res_ipv4,
-                                               nb_rx);
+                                               acl_search.num_ipv4);
                                }

                                if (acl_search.num_ipv6) {
@@ -1088,9 +1088,9 @@ acl_main_loop(__rte_unused void *dummy)

                                        l3fwd_acl_send_packets(
                                                qconf,
-                                               pkts_burst,
+                                               acl_search.m_ipv6,
                                                acl_search.res_ipv6,
-                                               nb_rx);
+                                               acl_search.num_ipv6);
                                }

-- 
You are receiving this mail because:
You are the assignee for the bug.

[-- Attachment #2: Type: text/html, Size: 6373 bytes --]

                 reply	other threads:[~2024-05-02 14:16 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=bug-1434-3@http.bugs.dpdk.org/ \
    --to=bugzilla@dpdk.org \
    --cc=dev@dpdk.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).