[Bug 2115795] Re: UDP fragmented packets not passing through in DPDK when destination port is defined

Brian Haley 2115795 at bugs.launchpad.net
Thu Jul 17 16:23:47 UTC 2025


Just to add a note, when we do something like the following, things seem
to work:

ovs-ofctl -O OpenFlow13 add-flow br-int
"table=0,priority=101,ip,ct_state=-trk,actions=ct(table=0)"

ovs-ofctl -O OpenFlow13 add-flow br-int
"table=44,priority=2003,ip,ct_nw_proto=17,ct_tp_dst=5060,ct_state=+new+trk,actions=ct(commit),normal,resubmit(,45)"

The first command in essence matches IP packets that have not yet been
tracked by conntrack, and adds various attributes around the connection
tracker. The second command then matches the connection tracker
destination port that is UDP (ct_nw_proto=17) as required.

-- 
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to ovn in Ubuntu.
https://bugs.launchpad.net/bugs/2115795

Title:
  UDP fragmented packets not passing through in DPDK when destination
  port is defined

Status in ovn package in Ubuntu:
  Confirmed

Bug description:
  [ Versions of Software]

  OS: jammy (22.04)
  Openstack: yoga
  openvswitch: 3.3.4
  dpdk: 23.11.4
  ovn: 22.03.3

  
  [ Test Scenario ]

  
  1. Create 2 instances in openstack on 2 different hypervisors
  2. Create a security group similar to something below

  
  $ openstack security group rule list 9c9f4cce-8f61-4f9a-b542-776fb6d55099 --long
  +--------------------------------------+-------------+-----------+------------+-----------+-----------+-----------------------+
  | ID                                   | IP Protocol | IP Range  | Port Range | Direction | Ethertype | Remote Security Group |
  +--------------------------------------+-------------+-----------+------------+-----------+-----------+-----------------------+
  | dda781f2-1517-44d7-91fe-ad095bd194c9 | udp         | 0.0.0.0/0 | 9080:9080  | ingress   | IPv4      | None                  |
  | eb7da79a-efd4-40d0-a0f6-21df88955185 | None        | None      |            | egress    | IPv4      | None                  |
  | 04c41dab-cf56-4aba-9082-6048a333fb62 | None        | None      |            | egress    | IPv6      | None                  |
  +--------------------------------------+-------------+-----------+------------+-----------+-----------+-----------------------+

  3. Add the security group to the second instance
  4. Create a scapy script similar to the contents in the attached file udp_pkt_gen.py
  5. Update the script to reflect the source IP/port and destination IP/port
  6. Run the script on the source host
  7. Monitor the tcpdump on the second host or the virtual interface on the hypervisor

  tcpdump -i <interface> not arp

  8. Now add all encompassing rule, and remove the security group for
  port 9080

  openstack security group rule create --ethertype IPv4 --protocol UDP
  --ingress 9c9f4cce-8f61-4f9a-b542-776fb6d55099

  9. Now you will see the packets coming through

  
  Looking through the OpenFlow tables in ovs, we see the following for just port 9080

  ```
  cookie=0xd5b295, duration=1754.469s, table=44, n_packets=0, n_bytes=0, priority=2002,udp,reg0=0x80/0x80,reg15=0x3,metadata=0x11,tp_dst=9080 actions=load:0x1->NXM_NX_XXREG0[97],resubmit(,45)
  cookie=0xd5b295, duration=1754.469s, table=44, n_packets=1686, n_bytes=709806, priority=2002,udp,reg0=0x80/0x80,reg15=0x6,metadata=0x11,tp_dst=9080 actions=load:0x1->NXM_NX_XXREG0[97],resubmit(,45)
  cookie=0x7933a8de, duration=1754.469s, table=44, n_packets=0, n_bytes=0, priority=2002,udp,reg0=0x100/0x100,reg15=0x6,metadata=0x11,tp_dst=9080 actions=resubmit(,45)
  cookie=0x7933a8de, duration=1754.469s, table=44, n_packets=0, n_bytes=0, priority=2002,udp,reg0=0x100/0x100,reg15=0x3,metadata=0x11,tp_dst=9080 actions=resubmit(,45)
  ```

  Now if you removed the port specific security group, you and add the
  all encompassing UDP port rule, yo will get he following rules in
  OpenFlow, and this is where we do get the packets through

  ```
  cookie=0x2e62bb04, duration=82.161s, table=44, n_packets=246, n_bytes=202868, priority=2002,udp,reg0=0x80/0x80,reg15=0x6,metadata=0x11 actions=load:0x1->NXM_NX_XXREG0[97],resubmit(,45)
  cookie=0x2e62bb04, duration=82.161s, table=44, n_packets=146, n_bytes=146949, priority=2002,udp,reg0=0x80/0x80,reg15=0x3,metadata=0x11 actions=load:0x1->NXM_NX_XXREG0[97],resubmit(,45)
  cookie=0xf0c033d8, duration=82.161s, table=44, n_packets=0, n_bytes=0, priority=2002,udp,reg0=0x100/0x100,reg15=0x6,metadata=0x11 actions=resubmit(,45)
  cookie=0xf0c033d8, duration=82.161s, table=44, n_packets=0, n_bytes=0, priority=2002,udp,reg0=0x100/0x100,reg15=0x3,metadata=0x11 actions=resubmit(,45)
  ```

  As an added item to test, we also tried to add the following rule to
  the port only rule, to allow fragmented packets, but this would allow
  all packets no matter what the port was, so this was not the right
  route for this.

  ovs-ofctl -O OpenFlow13 add-flow br-int
  "table=44,priority=2005,ip,nw_frag=yes,reg0=0x200/0x200,reg15=0x3,metadata=0x11,actions=resubmit(,45)"

  
  [Things to look at]

  https://issues.redhat.com/browse/FDP-1175
  This issue was already solved in latest commits, and the version we were using has this change in 3.3.4

  https://issues.redhat.com/browse/FDP-684
  This issue, although suggests packets on fragments, but the codebase seems to only touch the LB functions.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ovn/+bug/2115795/+subscriptions




More information about the Ubuntu-openstack-bugs mailing list