I am trying to follow the conntrack tutorial found here:
https://docs.openvswitch.org/en/latest/tutorials/ovs-conntrack/

However I am getting undesired results based on what the tutorial is
showing.

Here is the commands I used to run my setup

$ br="br0"
$ ns1="left"
$ ns2="right"
$ int_host1="veth_l1"
$ int_br1="veth_l0"
$ int_host2="veth_r1"
$ int_br2="veth_r0"
$ ip1="192.168.0.1/24"
$ ip2="192.168.0.2/24"
$ sudo ip netns add $ns1
$ sudo ip netns add $ns2
$ sudo ip link add $int_host1 type veth peer name $int_br1
$ sudo ip link add $int_host2 type veth peer name $int_br2
$ sudo ip link set $int_host1 netns $ns1
$ sudo ip link set $int_host2 netns $ns2
$ sudo ip netns exec $ns1 ip addr add $ip1 dev $int_host1
$ sudo ip netns exec $ns1 ip link set $int_host1 up
$ sudo ip link set $int_br1 up
$ sudo ip netns exec $ns2 ip addr add $ip2 dev $int_host2
$ sudo ip netns exec $ns2 ip link set $int_host2 up
$ sudo ip link set $int_br2 up
$ sudo ovs-vsctl add-br $br
$ sudo ovs-vsctl add-port $br $int_br1
$ sudo ovs-vsctl add-port $br $int_br2
$ sudo ip netns exec $ns1 sudo ip link set lo up 2>/dev/null
$ sudo ip netns exec $ns2 sudo ip link set lo up 2>/dev/null

I added the following rules:

sudo ovs-ofctl add-flow br0 "table=0, priority=50, ct_state=-trk, tcp,
in_port=veth_l0, actions=ct(table=0)"
sudo ovs-ofctl add-flow br0 "table=0, priority=50, ct_state=+trk+new, tcp,
in_port=veth_l0, actions=ct(commit),veth_r0"
sudo ovs-ofctl add-flow br0 "table=0, priority=50, ct_state=-trk, tcp,
in_port=veth_r0, actions=ct(table=0)"
sudo ovs-ofctl add-flow br0 "table=0, priority=50, ct_state=+trk+est, tcp,
in_port=veth_r0, actions=veth_l0"

In the "left" name space I ran the following from scapy (Simulate a SYN)
$ >>> sendp(Ether()/IP(src="192.168.0.1",
dst="192.168.0.2")/TCP(sport=1024, dport=2048, flags=0x02, seq=100),
iface="veth_l1")

Then in the "right" name space I ran the following from scapy (Simulate a
SYN-ACK)
$>>> sendp(Ether()/IP(src="192.168.0.2", dst="192.168.0.1")/TCP(sport=2048,
dport=1024, flags=0x12, seq=200, ack=101), iface="veth_r1")

I then run the following to gather flow dumps
$sudo ovs-appctl dpctl/dump-flows system@ovs-system | grep 192

And I get no output. I found out I have to wait some period of time before
trying to send traffic again and checking flow dump output with ovs-appctl
(I can only assume this is because of flow timers?) But the guide mentions
nothing of this.

After waiting a period of time (2 min or so?) I run the Scapy commands
again, and try to gather data, this is what I see.

$sudo ovs-appctl dpctl/dump-flows system@ovs-system
recirc_id(0x3d),in_port(5),ct_state(+new+trk),eth(),eth_type(0x0800),ipv4(proto=6,frag=no),
packets:0, bytes:0, used:never, actions:ct(commit),6
recirc_id(0),in_port(6),ct_state(-trk),eth(),eth_type(0x0800),ipv4(proto=6,frag=no),
packets:0, bytes:0, used:never, actions:ct,recirc(0x3e)
recirc_id(0x3e),in_port(6),ct_state(-new+est+trk),eth(),eth_type(0x0800),ipv4(proto=6,frag=no),
packets:0, bytes:0, used:never, actions:5
recirc_id(0),in_port(6),ct_state(-new-est-trk),eth(),eth_type(0x0806),
packets:0, bytes:0, used:never, actions:drop
recirc_id(0),in_port(5),ct_state(-trk),eth(),eth_type(0x0800),ipv4(proto=6,frag=no),
packets:0, bytes:0, used:never, actions:ct,recirc(0x3d)

This is not what I expect. I expect to see the output that the guide is
showing like this:

- For a SYN packet (LEFT -> RIGHT)
$ ovs-appctl dpctl/dump-conntrack system@ovs-system | grep "192.168.0.2"
tcp,orig=(src=192.168.0.1,dst=192.168.0.2,sport=1024,dport=2048),reply=(src=192.168.0.1,dst=192.168.0.2,sport=2048,dport=1024),protoinfo=(state=SYN_SENT)
- For a SYN-ACK packet (RIGHT -> LEFT)
$ ovs-appctl dpctl/dump-conntrack | grep "192.168.0.2"
tcp,orig=(src=192.168.0.2,dst=192.168.0.1,sport=1024,dport=2048),reply=(src=192.168.0.2,dst=192.168.0.1,sport=2048,dport=1024),protoinfo=(state=ESTABLISHED)

BTW, running just " ovs-appctl dpctl/dump-conntrack" By itself gives an
error that I need to select a datapath as there are multiple datapaths. I
rand the following to get my datapath and why I adjusted the above command
to include "system@ovs-system"

$sudo ovs-dpctl dump-dps
2022-07-22T18:48:38Z|00001|dpif_netlink|INFO|Kernel does not correctly
support feature negotiation. Using standard features.
system@ovs-system

I believe the flow data is being recognized as we when I run the following
I can see each flow and its idle_age change whenever I send traffic with
Scapy. The "tile_age" reset.

$ sudo ovs-ofctl dump-flows br0
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=164.209s, table=0, n_packets=2, n_bytes=108,
idle_age=75, priority=50,ct_state=-trk,tcp,in_port=1 actions=ct(table=0)
 cookie=0x0, duration=164.190s, table=0, n_packets=2, n_bytes=108,
idle_age=56, priority=50,ct_state=-trk,tcp,in_port=2 actions=ct(table=0)
 cookie=0x0, duration=164.199s, table=0, n_packets=2, n_bytes=108,
idle_age=75, priority=50,ct_state=+new+trk,tcp,in_port=1
actions=ct(commit),output:2
 cookie=0x0, duration=164.180s, table=0, n_packets=2, n_bytes=108,
idle_age=56, priority=50,ct_state=+est+trk,tcp,in_port=2 actions=output:1


Why am I not seeing the same output that the conntrack tutorial shows?
Why do I have to wait a period of time to show any type of captured
conntrack data when running `sudo ovs-appctl dpctl/dump-conntrack
system@ovs-system`?

- Dave
_______________________________________________
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to