<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta content="text/html;charset=UTF-8" http-equiv="Content-Type"></head><body ><div style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt;"><div>Hi,<br></div><div><div><br></div><div>after assigning the flow to non-root table (by setting the flow group value greater than 0), the flow was created successfully without any errors.<br></div><div><br></div><div>Thanks,<br></div><div>Gopinath K<br></div></div><div><br></div><div id="Zm-_Id_-Sgn" data-sigid="8035361000000008028" data-zbluepencil-ignore="true"><div><p style=""><span class="colour" style="color: rgb(42, 42, 42);">Sent using <a target="_blank" style="color: rgb(89, 143, 222);">Zoho Mail</a></span><br></p></div></div><div><br></div><div class="zmail_extra_hr" style="border-top: 1px solid rgb(204, 204, 204); height: 0px; margin-top: 10px; margin-bottom: 10px; line-height: 0px;"><br></div><div class="zmail_extra" data-zbluepencil-ignore="true"><div><br></div><div id="Zm-_Id_-Sgn1">---- On Wed, 06 Nov 2024 14:52:10 +0530 <b>Gopinath K <gopinath.gk@zohomail.com></b> wrote ---<br></div><div><br></div><blockquote id="blockquote_zmail" style="margin: 0px;"><div><div style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt"><div><span class="font" style="font-family:verdana"><span class="size" style="font-size: 13.3333px;">FW version: 16.35.1012 (MT_0000000425)</span></span><br></div><div><span class="font" style="font-family:verdana"><span class="size" style="font-size: 13.3333px;">OFED version: 24.07-0.6.1</span></span><br></div><div><br></div><div id="x_960937842Zm-_Id_-Sgn"><div><p><span class="colour" style="color: rgb(42, 42, 42);">Sent using <a style="color: rgb(89, 143, 222);" target="_blank">Zoho Mail</a></span><br></p></div></div><div><br></div><div style="border-top: 1px solid rgb(204, 204, 204); min-height: 0px; margin-top: 10px; margin-bottom: 10px; line-height: 0px" class="x_960937842zmail_extra_hr"><br></div><div class="x_960937842zmail_extra"><div><br></div><div id="x_960937842Zm-_Id_-Sgn1">---- On Wed, 06 Nov 2024 14:46:15 +0530 <b>Bing Zhao <<a target="_blank" href="mailto:bingz@nvidia.com">bingz@nvidia.com</a>></b> wrote ---<br></div><div><br></div><div id="zmail_block"><br></div></div><div><br></div></div><br></div><blockquote style="margin: 0px" id="x_960937842blockquote_zmail"><div class="zm_8178111060221268416_parse_9069091796139378113"><div class="x_1806222849WordSection1"><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="size" style="font-size: 11pt;">Which FW and OFED version are you using?</span><br></p><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="size" style="font-size: 11pt;">BTW, have you tried on 6-Dx and can you try on the non-root (>0) group? I remember of the send_to_kernel is only supported on non-root tables.</span><br></p><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="size" style="font-size:11pt"> </span><br></p><div style="border: none; border-left: solid blue 1.5pt; padding: 0in 0in 0in 4pt"><div><div style="border: none; border-top: solid rgb(225, 225, 225) 1pt; padding: 3pt 0in 0in 0in"><p style="margin-top: 0px; margin-bottom: 0px" class=""><b><span class="font" style="font-family:Calibri, sans-serif"><span class="size" style="font-size: 11pt;">From:</span></span></b><span class="font" style="font-family:Calibri, sans-serif"><span class="size" style="font-size: 11pt;"> Gopinath K <<a href="mailto:gopinath.gk@zohomail.com" target="_blank">gopinath.gk@zohomail.com</a>> <br> <b>Sent:</b> Tuesday, November 5, 2024 4:23 PM<br> <b>To:</b> users <<a href="mailto:users@dpdk.org" target="_blank">users@dpdk.org</a>><br> <b>Subject:</b> Error with SEND_TO_KERNEL Action during Flow creation on Mellanox CX-5</span></span></p></div></div><p style="margin-top: 0px; margin-bottom: 0px" class=""> <br></p><table class="x_1806222849MsoNormalTable" border="1" cellpadding="0" style="background: rgb(255, 235, 156);"><tbody><tr><td style="padding: 0.75pt 0.75pt 0.75pt 0.75pt"><p style="margin-top: 0px; margin-bottom: 0px" class=""><b><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 7.5pt;">External email: Use caution opening links or attachments</span></span></span></b><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:7.5pt"></span></span></span><br></p></td></tr></tbody></table><p style="margin-top: 0px; margin-bottom: 0px" class=""> <br></p><div><div><div><div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">Hi,<br> <br> I'm new to DPDK, and have been working on creating flow rules by using DPDK, to steer traffic to the kernel.<br> <br> To understand the functionality of the Mellanox Bifuracted drive, i attempted to steer ICMP packets to Linux Kernel and other traffics to DPDK application. first i tried to create simple flow rule which drops the packet whose destination equals 192.168.3.2 <a href="https://doc.dpdk.org/guides/howto/rte_flow.html" target="_blank">(refrenced
from from API examples)</a> the flow created successfully without an error.</span></span></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> However the issue arises when I attempt to use the RTE_FLOW_ACTION_TYPE_SEND_TO_KERNEL, which results in an error.</span></span><br></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">Below the sample code.<br> <br> 1. functions to validate and create flow rule.</span></span></p></div><div><blockquote style="border: solid rgb(204, 204, 204) 1pt; padding: 5pt 5pt 5pt 5pt; margin-top: 5pt; margin-bottom: 5pt"><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">static ::rte_flow* create_flow(uint16_t port_id, rte_flow_attr& attr, rte_flow_item& pattern, rte_flow_action& actions) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_error error;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> auto flow = rte_flow_create(port_id, &attr, &pattern, &actions, &error);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (!flow) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[create flow rule] failed to create flow rule, error: %s.\n", error.message);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return flow;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">}</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">bool validate_flow(uint16_t port_id, rte_flow_attr& attr, rte_flow_item& pattern, rte_flow_action& action) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_error error;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> auto res = rte_flow_validate(port_id, &attr, &pattern, &action, &error);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (res < 0) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[validate flow rule] validate flow failed, error: %s\n", error.message);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return false;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return true;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">}</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div></blockquote></div></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> 2. function to enable isolated mode on network port.</span></span><br></p></div><div><blockquote style="border: solid rgb(204, 204, 204) 1pt; padding: 5pt 5pt 5pt 5pt; margin-top: 5pt; margin-bottom: 5pt"><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">bool enable_isolated_mode(uint16_t port_id) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_error error;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> // enable isolated mode.</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (rte_flow_isolate(port_id, 1, &error) < 0) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[isolated mode] failed to enable isolated mode on port %u, error: %s\n", port_id, error.message);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return false;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[isolated mode] isolated mode enabled on port %u\n", port_id);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return true;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">}</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div></blockquote></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div><div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> 3. port initialization function.</span></span><br></p></div><blockquote style="border: solid rgb(204, 204, 204) 1pt; padding: 5pt 5pt 5pt 5pt; margin-top: 5pt; margin-bottom: 5pt"><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">static inline int</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">port_initilization(uint16_t port, rte_mempool *mbuf_pool) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_eth_conf port_conf;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (!rte_eth_dev_is_valid_port(port)) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[port init] port %u is not a valid port\n", port);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return -1;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (!enable_isolated_mode(port)) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return -1;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> memset(&port_conf, 0, sizeof(rte_eth_conf));</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_eth_dev_info device_info;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> auto retval = rte_eth_dev_info_get(port, &device_info);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (retval != 0) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[pirt init] getting device(port %u) info, error: %d [%s]\n", port, rte_errno, ::rte_strerror(rte_errno));</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return retval;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (device_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE)</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> port_conf.txmode.offloads |= RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> uint16_t rx_rings = 1;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> uint16_t tx_rings = 1;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (retval != 0) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[port init] failed to configure port(%u), error: %d [%s]\n", port, rte_errno, ::rte_strerror(rte_errno));</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return retval;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> uint16_t nb_rxd = RX_RING_SIZE;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> uint16_t nb_txd = TX_RING_SIZE;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> retval = rte_eth_dev_adjust_nb_rx_tx_desc(port, &nb_rxd, &nb_txd);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (retval != 0) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[port init] rte_eth_dev_adjust failed, error: %d [%s]\n", rte_errno, ::rte_strerror(rte_errno));</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return retval;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> for (auto q = 0; q < rx_rings; q++) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> retval = rte_eth_rx_queue_setup(port, q, nb_rxd, rte_eth_dev_socket_id(port), NULL, mbuf_pool);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (retval < 0)</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return retval;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> auto tx_conf = device_info.default_txconf;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> tx_conf.offloads = port_conf.txmode.offloads;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> for (auto q = 0; q < tx_rings; q++) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> retval = rte_eth_tx_queue_setup(port, q, nb_txd, rte_eth_dev_socket_id(port), &tx_conf);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (retval < 0)</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return retval;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> ::rte_ether_addr addr;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> retval = rte_eth_macaddr_get(port, &addr);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (retval != 0)</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return retval;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> retval = rte_eth_dev_start(port);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (retval != 0) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[port init] starting port %u failed, error: %d [%s]\n", port, rte_errno, rte_strerror(rte_errno));</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return retval;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[port init] successfully started port: %u\n", port);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("port %u MAC: %02" PRIx8 " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 "\n", port, RTE_ETHER_ADDR_BYTES(&addr));</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> init_ingress_flow_rules(port);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> init_egress_flow_rule(port);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> return 0;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">}</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div></blockquote></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> 4. Flow rule</span></span><br></p></div></div><div><blockquote style="border: solid rgb(204, 204, 204) 1pt; padding: 5pt 5pt 5pt 5pt; margin-top: 5pt; margin-bottom: 5pt"><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">static void init_ingress_flow_rule(uint32_t port_id) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_attr attr = {0};</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_item pattern[4];</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_action action[2];</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> attr.ingress = 1;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> memset(pattern, 0, sizeof pattern);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_item_eth eth_spec;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_item_eth eth_mask;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> memset(ð_spec, 0, sizeof eth_spec);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> memset(ð_mask, 0, sizeof eth_mask);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[0].spec = ð_spec;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_item_ipv4 ipv4_spec;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_item_ipv4 ipv4_mask;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> memset(&ipv4_spec, 0, sizeof ipv4_spec);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> memset(&ipv4_mask, 0, sizeof ipv4_mask);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV4;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[1].spec = &ipv4_spec;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[1].mask = &ipv4_mask;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_item_icmp icmp_spec;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> rte_flow_item_icmp icmp_mask;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> memset(&icmp_spec, 0, sizeof icmp_spec);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> memset(&icmp_mask, 0, sizeof icmp_mask);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> icmp_spec.hdr.icmp_type = 0;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[2].type = RTE_FLOW_ITEM_TYPE_ICMP;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[2].spec = &icmp_spec;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[2].mask = &icmp_mask;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> pattern[3].type = RTE_FLOW_ITEM_TYPE_END;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> action[0].type = RTE_FLOW_ACTION_TYPE_SEND_TO_KERNEL;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> action[1].type = RTE_FLOW_ACTION_TYPE_END;</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (validate_flow(port_id, attr, pattern[0], action[0])) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[init flow rule] validated successfully.\n");</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> auto flow = create_flow(port_id, attr, pattern[0], action[0]);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> if (flow != NULL) {</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> printf("[rte flow rule] successfully created a egress flow rule in port %u\n", port_id);</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> }</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">}</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div></blockquote><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">When I try to run the above program, the flow rule validated successfully with `rte_flow_validate()`, but failed on creating the flow with an error of `hardware refuses to
create flow`.</span></span><br></p></div><blockquote style="border: solid rgb(204, 204, 204) 1pt; padding: 5pt 5pt 5pt 5pt; margin-top: 5pt; margin-bottom: 5pt"><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">[init flow rule] validated successfully.</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">[create flow rule] failed to create flow rule, error: hardware refuses to create flow.</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div></blockquote><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">The same error arise when try to create the flow in `dpdk-testpmd` program.</span></span><br></p></div><blockquote style="border: solid rgb(204, 204, 204) 1pt; padding: 5pt 5pt 5pt 5pt; margin-top: 5pt; margin-bottom: 5pt"><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">testpmd> flow isolate 0 true</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">testpmd> port start 0</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="x_1806222849size"><span class="highlight" style="background-color: white;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt; background-size: initial;">testpmd> flow create 0 ingress pattern eth / ipv4 / icmp / end actions send_to_kernel / end</span></span></span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span><br></p></div><div><p class="" style="background-size: initial; margin-top: 0px; margin-bottom: 0px"><span class="highlight" style="background: white; margin-top: 0px; margin-bottom: 0px;"><span class="x_1806222849size"><span class="highlight" style="background-color: white;"><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt; background-size: initial;">port_flow_complain(): Caught PMD error type 1 (cause unspecified): hardware refuses to create flow:
Operation not supported</span></span></span></span></span><span class="colour" style="color: black;"><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"><br> Can anyone tell me whether my code is correct or not?</span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span></span></p></div></blockquote><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;">Can anyone tell me whether my code is correct or not? and any idea how to use SEND_TO_KERNEL Action on Mellanox CX-5 NIC's.<br> <br> System specification.<br> <br> Operating System: Debian</span></span></p></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size: 10pt;"> OS Version: 12.7<br> DPDK version: 24.07<br> <br> <br> Thanks and Regards,<br> Gopinath.</span></span></p></div></div><div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div></div><div><div><div><div id=""><div><p><span class="x_1806222849colour"><span class="colour" style="color: rgb(42, 42, 42);"><span class="font" style="font-family: Verdana, sans-serif;"><span class="size" style="font-size: 10pt;">Sent using Zoho Mail</span></span></span></span><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"></span></span><br></p></div></div></div></div></div><div><p style="margin-top: 0px; margin-bottom: 0px" class=""><span class="font" style="font-family:Verdana, sans-serif"><span class="size" style="font-size:10pt"> </span></span><br></p></div></div><p style="margin-top: 0px; margin-bottom: 0px" class=""> <br></p></div></div></div></div></blockquote></blockquote></div><div><br></div></div><br></body></html>