<div dir="ltr"><div>Hi Dariusz,<br></div><div>I have tested the following example and it is working fine.  </div><div>Can we add this example to documentation </div><div>(either in <a href="https://doc.dpdk.org/guides/testpmd_app_ug/testpmd_funcs.html">https://doc.dpdk.org/guides/testpmd_app_ug/testpmd_funcs.html</a> or mlx5 or somewhere else) ?  </div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Mon, Aug 11, 2025 at 8:17 PM Dariusz Sosnowski <<a href="mailto:dsosnowski@nvidia.com">dsosnowski@nvidia.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
[1]: Full conntrack example, testpmd commands:<br>
<br>
# Initial conntrack action configuration: original direction, state SYN_RECV, liberal mode and enabled<br>
set conntrack com peer 0 is_orig 1 enable 1 live 0 sack 0 cack 0 last_dir 0 liberal 1 state 0 max_ack_win 0 r_lim 5 last_win 510 last_seq 2000 last_ack 101 last_end 101 last_index 0x2<br>
set conntrack orig scale 0xf fin 0 acked 1 unack_data 0 sent_end 101 reply_end 65535 max_win 0 max_ack 0<br>
set conntrack rply scale 0xf fin 0 acked 1 unack_data 0 sent_end 2001 reply_end 65535 max_win 0 max_ack 101<br>
flow indirect_action 0 create ingress action conntrack / end<br>
<br>
# Create a rule for original direction<br>
flow create 0 group 3 ingress pattern eth / ipv4 src is 1.2.3.4 dst is 5.6.7.8 / tcp src is 40000 dst is 50000 / end actions indirect 0 / jump group 5 / end<br>
<br>
# Update conntrack action - now rule will created for reply direction<br>
set conntrack com peer 0 is_orig 0 enable 1 live 0 sack 0 cack 0 last_dir 0 liberal 1 state 0 max_ack_win 0 r_lim 5 last_win 510 last_seq 2000 last_ack 101 last_end 101 last_index 0x2<br>
flow indirect_action 0 update 0 action conntrack_update dir / end<br>
<br>
# Create a rule for reply direction<br>
flow create 0 group 3 ingress pattern eth / ipv4 src is 5.6.7.8 dst is 1.2.3.4 / tcp src is 50000 dst is 40000 / end actions indirect 0 / jump group 5 / end<br>
<br>
# Create group 0 rule for TCP traffic<br>
flow create 0 ingress pattern eth / ipv4 / tcp / end actions jump group 3 / end<br>
<br>
# Match valid packets, mark and send to queue 0<br>
flow create 0 group 5 ingress pattern eth / ipv4 / tcp / conntrack is 1 / end actions mark id 0x111 / queue index 0 / end<br>
# Match valid packets which change connection state<br>
flow create 0 group 5 ingress pattern eth / ipv4 / tcp / conntrack is 3 / end actions mark id 0x333 / queue index 0 / end<br>
<br>
set verbose 1<br>
set fwd rxonly<br>
start<br>
<br>
Example packets to send after all flow rules are created:<br>
<br>
# ACK in handshake: transition SYN_RECV->ESTABLISHED; logged as "FDIR matched ID=0x333"<br>
pkt = (Ether() / IP(src='1.2.3.4', dst='5.6.7.8') / TCP(sport=40000, dport=50000, flags='A', seq=101, ack=2001))<br>
<br>
# some data from original direction; logged as "FDIR matched ID=0x111"<br>
pkt = (Ether() / IP(src='1.2.3.4', dst='5.6.7.8') / TCP(sport=40000, dport=50000, flags='A', seq=101, ack=2001) / Raw(load=b'a' * 100))<br>
<br>
# ack from reply direction; logged as "FDIR matched ID=0x111"<br>
pkt = (Ether() / IP(src='5.6.7.8', dst='1.2.3.4') / TCP(sport=50000, dport=40000, flags='A', seq=2001, ack=201))<br>
<br>
# fin from original direction; logged as "FDIR matched ID=0x333"<br>
pkt = (Ether() / IP(src='1.2.3.4', dst='5.6.7.8') / TCP(sport=40000, dport=50000, flags='F', seq=201, ack=2001))<br>
<br>
# ack from reply direction; logged as "FDIR matched ID=0x333"<br>
pkt = (Ether() / IP(src='5.6.7.8', dst='1.2.3.4') / TCP(sport=50000, dport=40000, flags='A', seq=2001, ack=202))<br>
<br>
# fin from reply direction; logged as "FDIR matched ID=0x333"<br>
pkt = (Ether() / IP(src='5.6.7.8', dst='1.2.3.4') / TCP(sport=50000, dport=40000, flags='F', seq=2001, ack=202))<br>
<br>
# ack from original direction; logged as "FDIR matched ID=0x333"<br>
pkt = (Ether() / IP(src='1.2.3.4', dst='5.6.7.8') / TCP(sport=40000, dport=50000, flags='A', seq=201, ack=2002))<br>
</blockquote></div><div><br clear="all"></div><div>Best Regards, </div><div>Khadem </div></div>