[prev in list] [next in list] [prev in thread] [next in thread] 

List:       dpdk-users
Subject:    Unable to Restart a Session
From:       Robert Van Rooyen <rob () summitscientificinc ! com>
Date:       2022-10-14 4:52:26
Message-ID: CALFbpbbG5Lo54JrGbCr_jBWW005=S=QcECYDgEOXxoP9rtzcGg () mail ! gmail ! com
[Download RAW message or body]

I have an application where a call netOpen() and netClose() multiple times
within the same process (see below) to create, use, and destroy a session.
The first session works fine, however after the second netOpen() call I
never receive any packets from the destination device on the network. I
tried various sequences with the API that seemed reasonable, but I cannot
get the second netOpen() to receive any packets. It may also be the case
that the transmit never happens and as a consequence nothing is received
from the destination device on the network. Note that netInit() is called
once at the start of the application process and netShutdown() is called
when the application terminates. Are there any obvious issues with the
sequences listed that would prevent a subsequent session from working in
terms of transmit and receive?

netInit() // Called once at start of application

rte_log_set_global_level(…) // Set global log level
rte_eal_init(…)  // Initialize EAL
rte_eth_dev_count_avail // Determine the number of ports
rte_pktmbuf_pool_create(…)  // Create memory pool
rte_lcore_count()  // Validate cores
For each port

rte_eth_dev_reset(…)  // Reset port

rte_eth_dev_set_link_up(…)  // Bring up link on port

Wait for link to come up or timeout

rte_eth_link_get_nowait(…)

For each port

rte_eth_dev_socket_id(…)  // Validate polling threads

netOpen() // Called by the application when creating a session

rte_eth_dev_get_port_by_name(…) // Get the name of the port
rte_eth_dev_stop(…)  // Stop the port
rte_eth_dev_info_get(…)  // Get device info
rte_eth_dev_configure(…)  // Configure device
rte_eth_dev_adjust_nb_rx_tx_desc(…)  // Adjust descriptors
For each rx queue

rte_eth_rx_queue_setup(…)  // Setup receive queues

For each tx queue

rte_eth_tx_queue_setup(…)  // Setup transmit queues

rte_eth_promiscuous_enable(…)  // Enable promiscuous mode

rte_eth_macaddr_get(…)  // Store MAC address

rte_ring_create(…)  // Create receive ring

rte_eth_dev_start(…)   // Start the port

netClose()  // Called by the application when destroying a session

rte_eth_dev_stop(…)  // Stop the port
rte_ring_free(…)  // Free the receive ring

netShutdown() // Called once at termination of application

rte_eal_cleanup()  // Release all resources

[Attachment #3 (text/html)]

<div dir="ltr">I have an application where a call netOpen() and netClose() multiple \
times within the same process (see below) to create,  use, and destroy a session. The \
first session works fine, however after the second netOpen() call I never receive any \
packets from the destination device on the network. I tried various sequences with \
the API that  seemed reasonable, but I cannot get the second netOpen() to receive any \
packets. It may also be the case that the transmit never happens and as a consequence \
nothing is received from the destination device on the network. Note that netInit() \
is called once at the start of the application process and netShutdown() is called \
when the application terminates. Are there any obvious issues with the sequences \
listed that would prevent a subsequent  session from working in terms of transmit and \
receive?<div><br></div><div>netInit() // Called once at start of \
application<br></div><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_log_set_global_level(…) // Set global log \
level</div><div>rte_eal_init(…)   // Initialize \
EAL</div><div>rte_eth_dev_count_avail // Determine the number of \
ports</div><div>rte_pktmbuf_pool_create(…)   // Create memory \
pool</div><div>rte_lcore_count()   // Validate cores</div><div>For each \
port</div></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_dev_reset(…)   // Reset \
port</div></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_dev_set_link_up(…)   // Bring up link on \
port</div></blockquote></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>Wait for link to come up or \
timeout</div></blockquote></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_link_get_nowait(…)</div></blockquote></blockquote></blockquote><blockquote \
style="margin:0 0 0 40px;border:none;padding:0px"><div>For each \
port</div></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_dev_socket_id(…)   // Validate polling \
threads</div></blockquote></blockquote><div>netOpen() // Called by the application \
when creating a session<br></div><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_dev_get_port_by_name(…) // Get the name \
of the port</div><div>rte_eth_dev_stop(…)   // Stop the \
port</div><div>rte_eth_dev_info_get(…)   // Get device \
info</div><div>rte_eth_dev_configure(…)   // Configure \
device</div><div>rte_eth_dev_adjust_nb_rx_tx_desc(…)   // Adjust \
descriptors</div><div>For each rx queue</div></blockquote><blockquote style="margin:0 \
0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_rx_queue_setup(…)   // Setup receive \
queues</div></blockquote></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>For each tx queue</div></blockquote><blockquote \
style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_tx_queue_setup(…)   // Setup transmit \
queues</div></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_promiscuous_enable(…)   // Enable \
promiscuous mode</div></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_macaddr_get(…)   // Store MAC \
address</div></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_ring_create(…)   // Create receive \
ring</div></blockquote><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_dev_start(…)    // Start the \
port</div></blockquote></blockquote><div>netClose()   // Called by the application \
when destroying a session<br></div><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eth_dev_stop(…)   // Stop the \
port</div><div>rte_ring_free(…)   // Free the receive \
ring</div></blockquote><div>netShutdown() // Called once at termination of \
application<br></div><blockquote style="margin:0 0 0 \
40px;border:none;padding:0px"><div>rte_eal_cleanup()   // Release all \
resources</div></blockquote></div>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic