Uploaded image for project: 'Fast Datapath Product'
  1. Fast Datapath Product
  2. FDP-1470

VLANs on the OVS bridge with OVN

    • Icon: Story Story
    • Resolution: Unresolved
    • Icon: Normal Normal
    • None
    • None
    • ovn24.03
    • None
    • False
    • Hide

      None

      Show
      None
    • False
    • Hide

      Given a logical OVN switch with multiple localnet ports each configured with a unique VLAN tag,

      When a VM on that switch sends traffic tagged with its assigned VLAN,

      Then the traffic should only appear on the patch port corresponding to that VLAN and should not be duplicated onto patch ports associated with other VLAN tags.

      Show
      Given a logical OVN switch with multiple localnet ports each configured with a unique VLAN tag, When a VM on that switch sends traffic tagged with its assigned VLAN, Then the traffic should only appear on the patch port corresponding to that VLAN and should not be duplicated onto patch ports associated with other VLAN tags.
    • rhel-9
    • None
    • rhel-net-ovn

      It appears that OVN is not able to handle multiple patch ports from localnet ports with different tags. All the traffic on the br-ex physical interface will be duplicated for each tag.

      Here is ovn-nbctl show. Notice that this single OVN switch has two localnet ports with tags 101 and tag 201. From CMS(Neutron) I associated subnet 172.24.4.0/24 under segment 1 (VLAN101) and subnet 172.24.5.0/24 with segment 2 (VLAN 201).

      switch 4e0b4cb2-24e0-4a42-b608-9601aeee53f3 (neutron-4e0b4cb2-24e0-4a42-b608-9601aeee53f3) (aka public_multiseg)
          port provnet-b8d7f657-cca2-4c1a-b371-f3350ce04ce7
              type: localnet
              tag: 201
              addresses: ["unknown"]
          port 34068430-96b2-4649-880a-5d6797ab051f (aka port_sub_seg1_1)
              addresses: ["fa:16:3e:66:e0:07 172.24.4.111"]
          port provnet-3d9c4ee5-030b-409d-bf25-bf2197b32c69
              type: localnet
              tag: 101
              addresses: ["unknown"]
          port b4891b06-8127-4b4f-b0ef-78a0caf0af6f (aka port_sub1_seg2_2)
              addresses: ["fa:16:3e:6b:78:0f 172.24.5.11"]
          port 70400a35-00ce-4294-8686-2316bf1f5779 (aka port_sub1_seg2_1)
              addresses: ["fa:16:3e:80:13:95 172.24.5.10"]
          port 08cafa9e-8394-43b1-a957-dc87711ed193
              type: localport
              addresses: ["fa:16:3e:c3:e7:06 172.24.4.2 172.24.5.2"]
          port c21914ff-09bf-42df-aa43-c9ebd791a3f2 (aka port_sub_seg1_2)
              addresses: ["fa:16:3e:d1:1f:7e 172.24.4.130"]
      

      This deplyment has two OVN chassis (called central and worker). I then created two VMs under segment1 (vlan 101) and two VMs under segment2(vlan 201). In the ovn nb db output above VM ports start with`port_sub*` name. Lastly, I deployed one VM from each segment to each chassis. This is to make sure that any traffic directed to the other VM on the same segment(vlan ID) is on the other OVN chassis, thus forcing the traffic to leave br-ex physical NIC.
      When I deploy a VM from two different segment on a OVN chassis I get two patch ports from br-int to br-ex. This is expected, here is the ovs-vsctl show output from one chassis(other is identical)

      7d9c54cf-71d6-4f18-b3e4-3a0933ad6ba2
          Manager "ptcp:6640:127.0.0.1"
              is_connected: true
          Bridge br-ex
              Port br-ex
                  Interface br-ex
                      type: internal
              Port eth2
                  Interface eth2
              Port patch-provnet-b8d7f657-cca2-4c1a-b371-f3350ce04ce7-to-br-int
                  Interface patch-provnet-b8d7f657-cca2-4c1a-b371-f3350ce04ce7-to-br-int
                      type: patch
                      options: {peer=patch-br-int-to-provnet-b8d7f657-cca2-4c1a-b371-f3350ce04ce7}
              Port patch-provnet-3d9c4ee5-030b-409d-bf25-bf2197b32c69-to-br-int
                  Interface patch-provnet-3d9c4ee5-030b-409d-bf25-bf2197b32c69-to-br-int
                      type: patch
                      options: {peer=patch-br-int-to-provnet-3d9c4ee5-030b-409d-bf25-bf2197b32c69}
          Bridge br-int
              fail_mode: secure
              datapath_type: system
              Port tap4e0b4cb2-20
                  Interface tap4e0b4cb2-20
              Port tap70400a35-00
                  Interface tap70400a35-00
              Port br-int
                  Interface br-int
                      type: internal
              Port tap34068430-96
                  Interface tap34068430-96
              Port ovn-8571bb-0
                  Interface ovn-8571bb-0
                      type: geneve
                      options: {csum="true", key=flow, remote_ip="192.168.150.100"}
              Port patch-br-int-to-provnet-3d9c4ee5-030b-409d-bf25-bf2197b32c69
                  Interface patch-br-int-to-provnet-3d9c4ee5-030b-409d-bf25-bf2197b32c69
                      type: patch
                      options: {peer=patch-provnet-3d9c4ee5-030b-409d-bf25-bf2197b32c69-to-br-int}
              Port patch-br-int-to-provnet-b8d7f657-cca2-4c1a-b371-f3350ce04ce7
                  Interface patch-br-int-to-provnet-b8d7f657-cca2-4c1a-b371-f3350ce04ce7
                      type: patch
                      options: {peer=patch-provnet-b8d7f657-cca2-4c1a-b371-f3350ce04ce7-to-br-int}
      

      When I do tcpdump on the eth2 interface(br-ex interface) on that chassis I see that traffic is getting replicated for each VLAN ID.
      For example here is ARP request coming from VM with IP 10.24.4.111

      19:42:29.834734 fa:16:3e:66:e0:07 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 101, p 0, ethertype ARP (0x0806), Request who-has 172.24.4.1 tell 172.24.4.111, length 28
      19:42:29.834740 fa:16:3e:66:e0:07 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 201, p 0, ethertype ARP (0x0806), Request who-has 172.24.4.1 tell 172.24.4.111, length 28
      

      And basically any type of traffic (icmp, .etc) behaves the same, all packets get tagged with both VLANs. I would expect OVN to keep separation of vlan tagging in respect to localnet port.

      I am attaching my OVN DBs and OVS db

      _-------------- Original bug description, it is still applicable but I want to make sure there is separation, since information bellow came from a more complex enviroment, description above this line is more consolidated------------------------------------------------------------------------------- _

      I am filing this is as a bug but I can see this being handled as a feature as well.

      Background:
      In openstack, a user is able to present a multi-segmented layer3 network as a single entity in neutron. This is called routed provider network. Link . For example, customers can create a single network, lets call it "public" from within which they can have multiple subnets associated with different VLANs. They would group subnets under a segment and that segment would be tagged under some VLAN ID.

        1. central_ovs.db
          37 kB
        2. ovnnb_db.db
          36 kB
        3. ovnsb_db.db
          1.91 MB
        4. worker_ovs.db
          37 kB

              ovnteam@redhat.com OVN Team
              mtomaska@redhat.com Miro Tomaska
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated: