The idea to implement here is to introduce a LS port level (?) attribute to store the ethertype for the vlan network (default still to 0x8100), as we do for tag, then modify the code that pushes vlan tag to something like: put_OFPAT11_PUSH_VLAN(out, htons(ETH_TYPE_VLAN_8021AD)); vlan_vid = ofpact_put_SET_VLAN_VID(ofpacts_p); The reason to keep it per port is to accommodate for different ethertypes on different fabric networks. In most environments, we expect it to be the same though.
u/s implementation: https://patchwork.ozlabs.org/project/ovn/list/?series=236429 Will need to follow up with a OSP level fix to support it for the described environment. The OSP patch would set ethtype via config file or API and would translate it into localnet port options:ethtype=8a88 if needed.
Final patch merged: https://github.com/ovn-org/ovn/commit/50f4ea011622a63c5ac0eec200c4176b1afe6fb6
tested with following script: systemctl start openvswitch systemctl start ovn-northd ovn-nbctl set-connection ptcp:6641 ovn-sbctl set-connection ptcp:6642 ovs-vsctl set open . external_ids:system-id=hv1 external_ids:ovn-remote=tcp:127.0.0.1:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=127.0.0.1 systemctl restart ovn-controller ovs-vsctl set Open_vSwitch . other_config:vlan-limit=0 ovs-vsctl add-br br-provider ovs-vsctl set open . external_ids:ovn-bridge-mappings=provider:br-provider ovn-nbctl ls-add ls1 ovn-nbctl lsp-add ls1 ls1p1 ovn-nbctl lsp-set-addresses ls1p1 "00:00:00:01:01:01" ovn-nbctl lsp-add ls1 ls1p2 ovn-nbctl lsp-set-addresses ls1p2 "00:00:00:01:01:02" ovn-nbctl lsp-add ls1 ls1_ln "" 4 ovn-nbctl lsp-set-options ls1_ln network_name=provider ethtype=802.11ad ovn-nbctl lsp-set-type ls1_ln localnet ovn-nbctl lsp-set-addresses ls1_ln unknown ovn-nbctl set logical_switch ls1 other_config:vlan-passthru=true ovs-vsctl add-port br-int ls1p1 -- set interface ls1p1 type=internal external_ids:iface-id=ls1p1 ip netns add ls1p1 ip link set ls1p1 netns ls1p1 ip netns exec ls1p1 ip link set ls1p1 address 00:00:00:01:01:01 ip netns exec ls1p1 ip link set ls1p1 up ip netns exec ls1p1 ip addr add 1.1.1.1/24 dev ls1p1 ip netns exec ls1p1 ip link add link ls1p1 name ls1p1.3 type vlan id 3 ip netns exec ls1p1 ip link set ls1p1.3 up ip netns exec ls1p1 ip addr add 1.1.3.1/24 dev ls1p1.3 ovs-vsctl add-port br-provider ext1 -- set interface ext1 type=internal ip netns add ext1 ip link set ext1 netns ext1 ip netns exec ext1 ip link set ext1 up ip netns exec ext1 ip link add link ext1 name ext1.4 type vlan proto 802.1ad id 4 ip netns exec ext1 ip link set ext1.4 up ip netns exec ext1 ip addr add 1.1.1.3/24 dev ext1.4 ip netns exec ext1 ip link add link ext1.4 name ext1.4.3 type vlan id 3 ip netns exec ext1 ip link set ext1.4.3 up ip netns exec ext1 ip addr add 1.1.3.3/24 dev ext1.4.3 ip netns exec ls1p1 ping 1.1.1.3 -c 1 ip netns exec ls1p1 ping 1.1.3.3 -c 1 failed on ovn-2021-21.03.0-21.el8: [root@wsfd-advnetlab16 bz1925421]# rpm -qa | grep -E "openvswitch2.16|ovn-2021" ovn-2021-21.03.0-21.el8fdp.x86_64 ovn-2021-central-21.03.0-21.el8fdp.x86_64 openvswitch2.16-2.16.0-10.el8fdp.x86_64 ovn-2021-host-21.03.0-21.el8fdp.x86_64 python3-openvswitch2.16-2.16.0-10.el8fdp.x86_64 + ip netns exec ls1p1 ping 1.1.1.3 -c 1 PING 1.1.1.3 (1.1.1.3) 56(84) bytes of data. --- 1.1.1.3 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms + ip netns exec ls1p1 ping 1.1.3.3 -c 1 PING 1.1.3.3 (1.1.3.3) 56(84) bytes of data. --- 1.1.3.3 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms Verified on ovn-2021-21.06.0-29.el8fdp.x86_64: [root@wsfd-advnetlab16 bz1925421]# rpm -qa | grep -E "openvswitch2.16|ovn-2021" ovn-2021-central-21.06.0-29.el8fdp.x86_64 ovn-2021-21.06.0-29.el8fdp.x86_64 ovn-2021-host-21.06.0-29.el8fdp.x86_64 openvswitch2.16-2.16.0-10.el8fdp.x86_64 python3-openvswitch2.16-2.16.0-10.el8fdp.x86_64 + ip netns exec ls1p1 ping 1.1.1.3 -c 1 PING 1.1.1.3 (1.1.1.3) 56(84) bytes of data. 64 bytes from 1.1.1.3: icmp_seq=1 ttl=64 time=1061 ms --- 1.1.1.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1061.042/1061.042/1061.042/0.000 ms + ip netns exec ls1p1 ping 1.1.3.3 -c 1 PING 1.1.3.3 (1.1.3.3) 56(84) bytes of data. 64 bytes from 1.1.3.3: icmp_seq=1 ttl=64 time=1.24 ms --- 1.1.3.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.244/1.244/1.244/0.000 ms
Verified on ovn22.03-22.03.0-52.el8: [root@wsfd-advnetlab20 bz1925421]# rpm -qa | grep -E "openvswitch2.15|ovn22.03" ovn22.03-host-22.03.0-52.el8fdp.x86_64 python3-openvswitch2.15-2.15.0-104.el8fdp.x86_64 ovn22.03-22.03.0-52.el8fdp.x86_64 ovn22.03-central-22.03.0-52.el8fdp.x86_64 openvswitch2.15-2.15.0-104.el8fdp.x86_64 + ovn-nbctl lsp-add ls1 ls1_ln '' 4 + ovn-nbctl lsp-set-options ls1_ln network_name=provider ethtype=802.11ad + ovn-nbctl lsp-set-type ls1_ln localnet + ovn-nbctl lsp-set-addresses ls1_ln unknown + ovn-nbctl set logical_switch ls1 other_config:vlan-passthru=true + ovs-vsctl add-port br-int ls1p1 -- set interface ls1p1 type=internal external_ids:iface-id=ls1p1 + ip netns add ls1p1 + ip link set ls1p1 netns ls1p1 + ip netns exec ls1p1 ip link set ls1p1 address 00:00:00:01:01:01 + ip netns exec ls1p1 ip link set ls1p1 up + ip netns exec ls1p1 ip addr add 1.1.1.1/24 dev ls1p1 + ip netns exec ls1p1 ip link add link ls1p1 name ls1p1.3 type vlan id 3 + ip netns exec ls1p1 ip link set ls1p1.3 up + ip netns exec ls1p1 ip addr add 1.1.3.1/24 dev ls1p1.3 + ovs-vsctl add-port br-provider ext1 -- set interface ext1 type=internal + ip netns add ext1 + ip link set ext1 netns ext1 + ip netns exec ext1 ip link set ext1 up + ip netns exec ext1 ip link add link ext1 name ext1.4 type vlan proto 802.1ad id 4 + ip netns exec ext1 ip link set ext1.4 up + ip netns exec ext1 ip addr add 1.1.1.3/24 dev ext1.4 + ip netns exec ext1 ip link add link ext1.4 name ext1.4.3 type vlan id 3 + ip netns exec ext1 ip link set ext1.4.3 up + ip netns exec ext1 ip addr add 1.1.3.3/24 dev ext1.4.3 + ip netns exec ls1p1 ping 1.1.1.3 -c 1 PING 1.1.1.3 (1.1.1.3) 56(84) bytes of data. 64 bytes from 1.1.1.3: icmp_seq=1 ttl=64 time=1014 ms --- 1.1.1.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1014.418/1014.418/1014.418/0.000 ms + ip netns exec ls1p1 ping 1.1.3.3 -c 1 PING 1.1.3.3 (1.1.3.3) 56(84) bytes of data. 64 bytes from 1.1.3.3: icmp_seq=1 ttl=64 time=1.20 ms --- 1.1.3.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.195/1.195/1.195/0.000 ms
Verified on ovn-2021-21.12.0-73.el8: + ovn-nbctl lsp-add ls1 ls1_ln '' 4 + ovn-nbctl lsp-set-options ls1_ln network_name=provider ethtype=802.11ad + ovn-nbctl lsp-set-type ls1_ln localnet + ovn-nbctl lsp-set-addresses ls1_ln unknown + ovn-nbctl set logical_switch ls1 other_config:vlan-passthru=true + ovs-vsctl add-port br-int ls1p1 -- set interface ls1p1 type=internal external_ids:iface-id=ls1p1 + ip netns add ls1p1 + ip link set ls1p1 netns ls1p1 + ip netns exec ls1p1 ip link set ls1p1 address 00:00:00:01:01:01 + ip netns exec ls1p1 ip link set ls1p1 up + ip netns exec ls1p1 ip addr add 1.1.1.1/24 dev ls1p1 + ip netns exec ls1p1 ip link add link ls1p1 name ls1p1.3 type vlan id 3 + ip netns exec ls1p1 ip link set ls1p1.3 up + ip netns exec ls1p1 ip addr add 1.1.3.1/24 dev ls1p1.3 + ovs-vsctl add-port br-provider ext1 -- set interface ext1 type=internal + ip netns add ext1 + ip link set ext1 netns ext1 + ip netns exec ext1 ip link set ext1 up + ip netns exec ext1 ip link add link ext1 name ext1.4 type vlan proto 802.1ad id 4 + ip netns exec ext1 ip link set ext1.4 up + ip netns exec ext1 ip addr add 1.1.1.3/24 dev ext1.4 + ip netns exec ext1 ip link add link ext1.4 name ext1.4.3 type vlan id 3 + ip netns exec ext1 ip link set ext1.4.3 up + ip netns exec ext1 ip addr add 1.1.3.3/24 dev ext1.4.3 + ip netns exec ls1p1 ping 1.1.1.3 -c 1 PING 1.1.1.3 (1.1.1.3) 56(84) bytes of data. 64 bytes from 1.1.1.3: icmp_seq=1 ttl=64 time=1042 ms --- 1.1.1.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1041.532/1041.532/1041.532/0.000 ms + ip netns exec ls1p1 ping 1.1.3.3 -c 1 PING 1.1.3.3 (1.1.3.3) 56(84) bytes of data. 64 bytes from 1.1.3.3: icmp_seq=1 ttl=64 time=1.12 ms --- 1.1.3.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.119/1.119/1.119/0.000 ms [root@wsfd-advnetlab20 bz1925421]# rpm -qa | grep -E "openvswitch2.15|ovn-2021" python3-openvswitch2.15-2.15.0-104.el8fdp.x86_64 ovn-2021-central-21.12.0-73.el8fdp.x86_64 ovn-2021-host-21.12.0-73.el8fdp.x86_64 openvswitch2.15-2.15.0-104.el8fdp.x86_64 ovn-2021-21.12.0-73.el8fdp.x86_64
also verified on ovn22.03-22.03.0-52.el9: + ovn-nbctl lsp-add ls1 ls1_ln '' 4 + ovn-nbctl lsp-set-options ls1_ln network_name=provider ethtype=802.11ad + ovn-nbctl lsp-set-type ls1_ln localnet + ovn-nbctl lsp-set-addresses ls1_ln unknown + ovn-nbctl set logical_switch ls1 other_config:vlan-passthru=true + ovs-vsctl add-port br-int ls1p1 -- set interface ls1p1 type=internal external_ids:iface-id=ls1p1 + ip netns add ls1p1 + ip link set ls1p1 netns ls1p1 + ip netns exec ls1p1 ip link set ls1p1 address 00:00:00:01:01:01 + ip netns exec ls1p1 ip link set ls1p1 up + ip netns exec ls1p1 ip addr add 1.1.1.1/24 dev ls1p1 + ip netns exec ls1p1 ip link add link ls1p1 name ls1p1.3 type vlan id 3 + ip netns exec ls1p1 ip link set ls1p1.3 up + ip netns exec ls1p1 ip addr add 1.1.3.1/24 dev ls1p1.3 + ovs-vsctl add-port br-provider ext1 -- set interface ext1 type=internal + ip netns add ext1 + ip link set ext1 netns ext1 + ip netns exec ext1 ip link set ext1 up + ip netns exec ext1 ip link add link ext1 name ext1.4 type vlan proto 802.1ad id 4 + ip netns exec ext1 ip link set ext1.4 up + ip netns exec ext1 ip addr add 1.1.1.3/24 dev ext1.4 + ip netns exec ext1 ip link add link ext1.4 name ext1.4.3 type vlan id 3 + ip netns exec ext1 ip link set ext1.4.3 up + ip netns exec ext1 ip addr add 1.1.3.3/24 dev ext1.4.3 + ip netns exec ls1p1 ping 1.1.1.3 -c 1 PING 1.1.1.3 (1.1.1.3) 56(84) bytes of data. 64 bytes from 1.1.1.3: icmp_seq=1 ttl=64 time=1010 ms --- 1.1.1.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1009.987/1009.987/1009.987/0.000 ms + ip netns exec ls1p1 ping 1.1.3.3 -c 1 PING 1.1.3.3 (1.1.3.3) 56(84) bytes of data. 64 bytes from 1.1.3.3: icmp_seq=1 ttl=64 time=1.22 ms --- 1.1.3.3 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.221/1.221/1.221/0.000 ms [root@wsfd-advnetlab18 bz1925421]# rpm -qa | grep -E "openvswitch2.17|ovn" ovn22.03-22.03.0-52.el9fdp.x86_64 openvswitch2.17-2.17.0-22.el9fdp.x86_64 ovn22.03-central-22.03.0-52.el9fdp.x86_64 ovn22.03-host-22.03.0-52.el9fdp.x86_64
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (ovn bug fix and enhancement update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2022:5446