Skip to content

[PWCI] "null pmd minor cleanup and add test"#616

Open
ovsrobot wants to merge 3 commits intomainfrom
series_37007
Open

[PWCI] "null pmd minor cleanup and add test"#616
ovsrobot wants to merge 3 commits intomainfrom
series_37007

Conversation

@ovsrobot
Copy link
Owner

@ovsrobot ovsrobot commented Jan 10, 2026

Auto-submission for "http://patchwork.dpdk.org/project/dpdk/list/?series=37007"

Summary by Sourcery

Add comprehensive unit tests for the null PMD and adjust related helpers and device info to support more realistic packet and queue characteristics.

New Features:

  • Introduce a new null PMD unit test suite covering RX/TX behavior, statistics, configuration modes, RSS/RETA, MTU and MAC handling, and multi-threaded TX.

Bug Fixes:

  • Fix packet burst generator helpers to use 16-bit parameters and correct segment length calculations for multi-segment packets.
  • Align null PMD device info reporting with expected limits by using UINT32_MAX for max_rx_pktlen and removing an invalid minimum RX buffer size.

Tests:

  • Add test_pmd_null.c and register a fast autotest that validates core functionality and configuration options of the null PMD, including multi-queue RSS and MT_LOCKFREE TX behavior.
  • Wire the new null PMD test into the app/test meson build with appropriate dependencies.

Summary by CodeRabbit

  • Tests
    • Added comprehensive unit test suite for Null PMD device covering RX/TX operations, port configurations, RSS/RETA settings, multi-threaded packet handling, and device statistics validation.

✏️ Tip: You can customize this high-level summary in your review settings.

The info_get callback doesn't need to check its args
since already done by ethdev.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: 0-day Robot <robot@bytheb.org>
The packet length in packet burst generator was uint8_t which
limited usefulness for testing larger packet sizes.

The number of packets segments per packet is currently limited
by mbuf nb_segs which is 16 bits. The comment is incorrect.

Change nb_pkt_per_burst to uint16_t since that is the limit
for tx_burst.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: 0-day Robot <robot@bytheb.org>
Add a test for null PMD including different packet sizes.

This test was generated with Claude AI based off of existing
test_pmd_ring.c with some cleanup afterwards.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: 0-day Robot <robot@bytheb.org>
@sourcery-ai
Copy link

sourcery-ai bot commented Jan 10, 2026

Reviewer's Guide

Refactors packet burst generator helpers for wider parameter types and clearer segment length handling, simplifies null PMD device info reporting, and adds a comprehensive unit test suite and meson wiring for the null PMD covering RX/TX behavior, stats, configuration, RSS/RETA, and multithreaded TX semantics.

Sequence diagram for null PMD test using packet burst generator

sequenceDiagram
    actor Tester
    participant TestApp as test_pmd_null
    participant EthDev as rte_eth_dev_null
    participant BurstGen as packet_burst_generator

    Tester->>TestApp: run test_null_pmd_tx_basic()
    TestApp->>EthDev: rte_eth_dev_configure()
    EthDev-->>TestApp: success
    TestApp->>EthDev: rte_eth_dev_start()
    EthDev-->>TestApp: success

    TestApp->>BurstGen: generate_packet_burst(mbufs, nb_packets, pkt_len, segs_per_pkt)
    BurstGen-->>TestApp: filled_mbufs

    TestApp->>EthDev: tx_burst(queue_id, mbufs, nb_packets)
    EthDev-->>TestApp: nb_tx

    TestApp->>EthDev: rte_eth_stats_get(stats)
    EthDev-->>TestApp: updated_stats

    TestApp-->>Tester: assert stats and nb_tx, report result
Loading

Class diagram for null PMD internals, device info, packet burst generator, and tests

classDiagram
    class rte_eth_dev_data {
        +void* dev_private
    }

    class pmd_internals {
        +rx_null_queues[]
        +tx_null_queues[]
        +uint32_t reta_size
    }

    class rte_eth_dev {
        +rte_eth_dev_data* data
        +int (*dev_configure)(rte_eth_dev* dev)
        +int (*dev_start)(rte_eth_dev* dev)
        +int (*dev_stop)(rte_eth_dev* dev)
        +int (*dev_close)(rte_eth_dev* dev)
        +uint16_t (*rx_burst)(rte_eth_dev* dev, uint16_t queue_id, void** rx_pkts, uint16_t nb_pkts)
        +uint16_t (*tx_burst)(rte_eth_dev* dev, uint16_t queue_id, void** tx_pkts, uint16_t nb_pkts)
    }

    class rte_eth_dev_info {
        +uint32_t max_mac_addrs
        +uint32_t max_rx_pktlen
        +uint16_t max_rx_queues
        +uint16_t max_tx_queues
        +uint32_t reta_size
        +uint64_t tx_offload_capa
    }

    class null_pmd_driver {
        +int eth_dev_info(rte_eth_dev* dev, rte_eth_dev_info* dev_info)
        +int eth_rx_queue_setup(rte_eth_dev* dev, uint16_t queue_id)
        +int eth_tx_queue_setup(rte_eth_dev* dev, uint16_t queue_id)
        +int eth_rx_queue_start(rte_eth_dev* dev, uint16_t queue_id)
        +int eth_tx_queue_start(rte_eth_dev* dev, uint16_t queue_id)
    }

    class packet_burst_generator {
        +int init_packets(uint16_t nb_packets, uint32_t pkt_len)
        +int generate_packet_burst(void** mbufs, uint16_t nb_packets, uint32_t pkt_len, uint16_t segs_per_pkt)
        +int verify_packet_burst(void** mbufs, uint16_t nb_packets, uint32_t expected_pkt_len, uint16_t expected_segs)
    }

    class test_pmd_null {
        +int test_null_pmd_rx_basic()
        +int test_null_pmd_tx_basic()
        +int test_null_pmd_stats()
        +int test_null_pmd_config()
        +int test_null_pmd_rss_reta()
        +int test_null_pmd_multithread_tx()
    }

    rte_eth_dev_data --> pmd_internals : dev_private
    rte_eth_dev --> rte_eth_dev_data : data
    null_pmd_driver --> pmd_internals : uses
    null_pmd_driver --> rte_eth_dev : implements_callbacks_for
    null_pmd_driver --> rte_eth_dev_info : fills
    packet_burst_generator --> test_pmd_null : used_by
    test_pmd_null --> null_pmd_driver : calls_via_ethdev_api
Loading

File-Level Changes

Change Details Files
Broaden packet burst generator APIs and clean up segment length calculations used by tests
  • Change generate_packet_burst and generate_packet_burst_proto signatures to take uint16_t for burst size, packet length, and number of segments instead of int/uint8_t
  • Reorder local variable declarations and switch per-segment length variables to uint16_t, introducing last_seg_data_len to hold the remainder-adjusted size of the final segment
  • Precompute pkt_seg_data_len and last_seg_data_len once per call and use last_seg_data_len for the last segment instead of repeating the modulo expression
  • Adjust header declarations in packet_burst_generator.h to match the new function signatures
app/test/packet_burst_generator.c
app/test/packet_burst_generator.h
Tighten null PMD eth_dev_info implementation and use standard max values
  • Remove now-unneeded NULL checks in eth_dev_info and initialize the internals pointer directly from dev->data->dev_private
  • Replace dev_info->max_rx_pktlen cast from (uint32_t)-1 with UINT32_MAX for clarity and type safety
  • Drop dev_info->min_rx_bufsize initialization, relying on defaults or other logic
drivers/net/null/rte_eth_null.c
Wire up and implement a new null PMD unit test suite
  • Add test_pmd_null.c to the app/test build with appropriate meson dependencies on net_ring, ethdev, and bus_vdev
  • Implement test setup/teardown that creates a mempool, instantiates a null vdev, configures one RX/TX queue pair, and starts/stops the device
  • Add focused tests covering RX behavior (size, port, emptiness), TX freeing semantics, statistics accounting and reset, configurable packet size, copy and no‑RX modes, link status transitions, device info fields including MTU and offload capabilities, multi‑burst traffic, RSS hash and key configuration, RETA programming/query, MAC address operations, promiscuous/all‑multicast defaults, and multi‑threaded TX using the MT_LOCKFREE capability with worker lcores and stat verification
  • Register the test suite as a fast autotest named null_pmd_autotest routed through the generic unit_test_suite_runner
app/test/meson.build
app/test/test_pmd_null.c

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai
Copy link

coderabbitai bot commented Jan 10, 2026

📝 Walkthrough

Walkthrough

This pull request extends the DPDK null PMD with a comprehensive new test suite, updates function signatures in the packet burst generator to use wider integer types (uint16_t), adds dependencies for the test in the build configuration, and refactors the null PMD device info function for clarity.

Changes

Cohort / File(s) Summary
Build Configuration
app/test/meson.build
Added per-file dependencies for test_pmd_null.c: net_ring, ethdev, bus_vdev.
Packet Burst Generator Signatures
app/test/packet_burst_generator.h, app/test/packet_burst_generator.c
Updated function signatures for generate_packet_burst and generate_packet_burst_proto to use uint16_t for nb_pkt_per_burst, pkt_len, and nb_pkt_segs (previously int/uint8_t). Implemented per-burst length calculation logic and improved mbuf allocation failure handling.
Null PMD Test Suite
app/test/test_pmd_null.c
Introduced comprehensive test suite with 968 lines covering RX/TX, packet handling, link status, device info, statistics, multi-burst operations, RSS/RETA configuration, MAC address management, and multi-threaded TX scenarios. Registers null_pmd_autotest entry point.
Null PMD Driver
drivers/net/null/rte_eth_null.c
Simplified eth_dev_info by removing redundant validation, directly deriving internals from device private data, and updating max_rx_pktlen to use UINT32_MAX constant.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

🐰 With whiskers twitching, test by test,
Our Null PMD passes every quest!
From multi-threaded bursts that fly,
To RSS and RETA reaching high, 🌙
Wide integers now hold the line,
As packets dance and queues align.

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 62.07% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly refers to the main changes: cleanup of null PMD and addition of tests, which align with the primary modifications across the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 2 issues, and left some high level feedback:

  • In the packet_burst_generator helpers, consider validating nb_pkt_segs (e.g., non-zero and not exceeding pkt_len) before using it to compute pkt_seg_data_len to avoid potential division-by-zero or nonsensical segment sizes if called with bad parameters.
  • In test_mbuf_setup_burst, updating m->buf_len to the chosen packet length is unusual since buf_len describes the buffer capacity; it would be safer to leave buf_len untouched and set data_len/pkt_len only so that mbufs remain consistent with their pool configuration.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In the packet_burst_generator helpers, consider validating `nb_pkt_segs` (e.g., non-zero and not exceeding pkt_len) before using it to compute `pkt_seg_data_len` to avoid potential division-by-zero or nonsensical segment sizes if called with bad parameters.
- In `test_mbuf_setup_burst`, updating `m->buf_len` to the chosen packet length is unusual since `buf_len` describes the buffer capacity; it would be safer to leave `buf_len` untouched and set `data_len`/`pkt_len` only so that mbufs remain consistent with their pool configuration.

## Individual Comments

### Comment 1
<location> `app/test/test_pmd_null.c:220-223` </location>
<code_context>
+	TEST_ASSERT(nb_tx == BURST_SIZE,
+		    "Expected to TX %u packets, but sent %u", BURST_SIZE, nb_tx);
+
+	pool_count_after = rte_mempool_avail_count(mp);
+
+	/* Verify mbufs were freed - pool should have same count */
+	TEST_ASSERT(pool_count_after >= pool_count_before,
+		    "Mbufs not freed: before=%u, after=%u",
+		    pool_count_before, pool_count_after);
</code_context>

<issue_to_address>
**suggestion (testing):** Strengthen the TX basic test by asserting exact mempool count rather than `>=`.

Since this test allocates a fixed burst and relies on the null PMD to free exactly those mbufs, the assertion should be stricter. Instead of `pool_count_after >= pool_count_before`, either:
- Assert equality (`pool_count_after == pool_count_before`), or
- Track how many mbufs this test allocates and assert the mempool delta matches that number.

Using `>=` can mask leaks or partial frees and weakens the test’s ability to validate that TX frees all mbufs.

```suggestion
	/* Verify mbufs were freed - pool should have same count */
	TEST_ASSERT(pool_count_after == pool_count_before,
		    "Mbuf leak or unexpected mempool delta: before=%u, after=%u",
		    pool_count_before, pool_count_after);
```
</issue_to_address>

### Comment 2
<location> `app/test/test_pmd_null.c:615-620` </location>
<code_context>
+test_null_reta_config(void)
+{
+	struct rte_eth_dev_info dev_info;
+	struct rte_eth_rss_reta_entry64 reta_conf[RTE_ETH_RSS_RETA_SIZE_128 /
+						 RTE_ETH_RETA_GROUP_SIZE];
+	struct rte_eth_conf port_conf = {0};
+	uint16_t reta_port;
+	const uint16_t num_queues = 2;
+	unsigned int i, j, nreta;
+	uint16_t q;
+	int ret;
</code_context>

<issue_to_address>
**issue (bug_risk):** Make RETA tests robust to `dev_info.reta_size` values larger than 128 to avoid potential overflow.

`reta_conf` is sized assuming a maximum RETA size of 128, but `nreta` is computed from `dev_info.reta_size`. If `dev_info.reta_size > 128`, `nreta` will exceed `reta_conf`'s capacity, causing out-of-bounds access during init/update/query. Please either enforce `dev_info.reta_size <= RTE_ETH_RSS_RETA_SIZE_128` (e.g., with an assert) or size `reta_conf` and the associated loop bounds from a value derived from `dev_info.reta_size` (possibly clamped via `RTE_MIN`).
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @app/test/test_pmd_null.c:
- Around line 176-195: In test_mbuf_setup_burst, do not modify the mbuf's
buf_len (it is mempool-owned); remove the assignment to m->buf_len and instead
set m->data_len to the chosen length and also set m->pkt_len = m->data_len for
single-segment packets; ensure this change is made after successful
rte_pktmbuf_alloc_bulk in the function test_mbuf_setup_burst and keep the length
computation using rte_pktmbuf_tailroom(m) - RTE_ETHER_MIN_LEN as before.
🧹 Nitpick comments (1)
app/test/packet_burst_generator.c (1)

245-248: Inconsistent type handling compared to generate_packet_burst_proto.

In generate_packet_burst, the comparison uses an explicit cast (int)(nb_pkt_segs - 1), while in generate_packet_burst_proto (line 334), the equivalent comparison is i != nb_pkt_segs - 1 without the cast. While both work correctly due to integer promotion rules, the inconsistency is confusing.

Consider aligning both functions to use the same style. Removing the cast here would be simpler since the comparison works correctly without it.

♻️ Suggested simplification
-			if (i != (int)(nb_pkt_segs - 1))
+			if (i != nb_pkt_segs - 1)
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cd60dcd and 97c9fe1.

📒 Files selected for processing (5)
  • app/test/meson.build
  • app/test/packet_burst_generator.c
  • app/test/packet_burst_generator.h
  • app/test/test_pmd_null.c
  • drivers/net/null/rte_eth_null.c
🧰 Additional context used
🧬 Code graph analysis (2)
app/test/packet_burst_generator.h (1)
app/test/packet_burst_generator.c (1)
  • generate_packet_burst_proto (297-424)
app/test/test_pmd_null.c (4)
lib/mbuf/rte_mbuf.c (1)
  • rte_pktmbuf_pool_create (280-287)
lib/ethdev/rte_ethdev.h (2)
  • rte_eth_rx_burst (6347-6406)
  • rte_eth_tx_burst (6686-6746)
lib/mbuf/rte_mbuf.h (2)
  • rte_pktmbuf_alloc_bulk (1068-1082)
  • rte_pktmbuf_tailroom (1629-1634)
lib/mempool/rte_mempool.c (1)
  • rte_mempool_avail_count (1021-1042)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Sourcery review
🔇 Additional comments (6)
app/test/meson.build (1)

144-144: LGTM!

The dependency entry for test_pmd_null.c follows the established pattern used by similar PMD tests in this file (e.g., test_pmd_ring.c on line 146). The dependencies ['net_ring', 'ethdev', 'bus_vdev'] are appropriate for a vdev-based PMD test.

drivers/net/null/rte_eth_null.c (1)

301-304: LGTM! Clean simplification of the info_get callback.

The changes appropriately:

  • Derive internals directly from dev->data->dev_private, relying on the ethdev layer to validate arguments before invoking dev_ops callbacks
  • Use the more explicit UINT32_MAX constant instead of (uint32_t)-1 for max_rx_pktlen
app/test/packet_burst_generator.h (1)

61-72: LGTM! Type widening aligns with DPDK conventions.

The updated function signatures using uint16_t for nb_pkt_per_burst, pkt_len, and nb_pkt_segs are appropriate:

  • Allows burst sizes beyond the previous uint8_t limit of 255
  • pkt_len and nb_pkt_segs now match the corresponding rte_mbuf field types (data_len and nb_segs)
app/test/test_pmd_null.c (1)

937-968: Well-structured test suite with good coverage.

The test suite provides comprehensive coverage of the null PMD functionality including:

  • Basic RX/TX operations
  • Statistics tracking and reset
  • Different PMD modes (copy, no-rx)
  • Link status management
  • Device info validation
  • RSS/RETA configuration
  • Multi-threaded TX verification

The test registration and suite structure follow DPDK testing conventions correctly.

app/test/packet_burst_generator.c (2)

209-224: LGTM! Improved segment handling and type consistency.

The changes correctly:

  • Update signature to use uint16_t for all parameters
  • Compute per-segment data lengths with proper remainder handling for the last segment
  • Handle mbuf allocation failures gracefully with the nomore_mbuf label pattern

297-313: LGTM!

Changes mirror those in generate_packet_burst with consistent segment length calculation and error handling.

Comment on lines +176 to +195
static int
test_mbuf_setup_burst(struct rte_mbuf **bufs, unsigned int burst_size)
{
unsigned int i;

if (rte_pktmbuf_alloc_bulk(mp, bufs, burst_size) != 0)
return -1;

for (i = 0; i < burst_size; i++) {
struct rte_mbuf *m = bufs[i];
uint16_t len;

/* Choose random length between ether min and available space */
len = rte_rand_max(rte_pktmbuf_tailroom(m) - RTE_ETHER_MIN_LEN)
+ RTE_ETHER_MIN_LEN;
m->data_len = len;
m->buf_len = len;
}
return 0;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Critical bug: Incorrectly modifying buf_len corrupts mbuf metadata.

buf_len represents the total buffer capacity allocated by the mempool and must not be modified. Setting m->buf_len = len corrupts the mbuf metadata, potentially causing buffer overflows or incorrect behavior in downstream code.

Additionally, pkt_len should be set to match data_len for single-segment packets.

🐛 Proposed fix
 	for (i = 0; i < burst_size; i++) {
 		struct rte_mbuf *m = bufs[i];
 		uint16_t len;
 
 		/* Choose random length between ether min and available space */
 		len = rte_rand_max(rte_pktmbuf_tailroom(m) - RTE_ETHER_MIN_LEN)
 			+ RTE_ETHER_MIN_LEN;
 		m->data_len = len;
-		m->buf_len = len;
+		m->pkt_len = len;
 	}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
static int
test_mbuf_setup_burst(struct rte_mbuf **bufs, unsigned int burst_size)
{
unsigned int i;
if (rte_pktmbuf_alloc_bulk(mp, bufs, burst_size) != 0)
return -1;
for (i = 0; i < burst_size; i++) {
struct rte_mbuf *m = bufs[i];
uint16_t len;
/* Choose random length between ether min and available space */
len = rte_rand_max(rte_pktmbuf_tailroom(m) - RTE_ETHER_MIN_LEN)
+ RTE_ETHER_MIN_LEN;
m->data_len = len;
m->buf_len = len;
}
return 0;
}
static int
test_mbuf_setup_burst(struct rte_mbuf **bufs, unsigned int burst_size)
{
unsigned int i;
if (rte_pktmbuf_alloc_bulk(mp, bufs, burst_size) != 0)
return -1;
for (i = 0; i < burst_size; i++) {
struct rte_mbuf *m = bufs[i];
uint16_t len;
/* Choose random length between ether min and available space */
len = rte_rand_max(rte_pktmbuf_tailroom(m) - RTE_ETHER_MIN_LEN)
RTE_ETHER_MIN_LEN;
m->data_len = len;
m->pkt_len = len;
}
return 0;
}
🤖 Prompt for AI Agents
In @app/test/test_pmd_null.c around lines 176 - 195, In test_mbuf_setup_burst,
do not modify the mbuf's buf_len (it is mempool-owned); remove the assignment to
m->buf_len and instead set m->data_len to the chosen length and also set
m->pkt_len = m->data_len for single-segment packets; ensure this change is made
after successful rte_pktmbuf_alloc_bulk in the function test_mbuf_setup_burst
and keep the length computation using rte_pktmbuf_tailroom(m) -
RTE_ETHER_MIN_LEN as before.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants