Bug 1791815 - [RFE][OVN] Enable querier for multicast (IGMP) in OVN
Summary: [RFE][OVN] Enable querier for multicast (IGMP) in OVN
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: openstack-neutron
Version: 17.0 (Wallaby)
Hardware: Unspecified
OS: Unspecified
Target Milestone: ---
: ---
Assignee: Kamil Sambor
QA Contact: Eran Kuris
Depends On: 1575512 1791787
TreeView+ depends on / blocked
Reported: 2020-01-16 14:09 UTC by Lucas Alvares Gomes
Modified: 2021-06-03 12:23 UTC (History)
7 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Last Closed:
Target Upstream Version:

Attachments (Terms of Use)

System ID Private Priority Status Summary Last Updated
OpenStack gerrit 764427 0 None NEW Enable querier for multicast (IGMP) in OVN 2021-02-17 10:20:30 UTC

Description Lucas Alvares Gomes 2020-01-16 14:09:47 UTC
Core OVN supports IGMP querier we should also add support for it in the OVN driver in Neutron.

In order to enable it via the OVN driver in neutron one should set: 

other_config:mcast_querier='true', other_config:mcast_eth_src=<smac_to_be_used_for_queries>, other_config:mcast_ip4_src=<src_ip_to_be_used_for_queries>

For the smac and sip I would use the values from the logical router port connected to the switch if any. Otherwise, just set mcast_snoop as in [0]

[0] https://bugzilla.redhat.com/show_bug.cgi?id=1791787

Comment 2 Roman Safronov 2020-11-18 09:22:56 UTC
I tested igmp snooping basic scenario on RHOS-16.1-RHEL-8-20201110.n.1 (python3-networking-ovn-7.3.1-1.20200902233413.el8ost.noarch, ovn2.13-20.09.0-2.el8fdp.x86_64)  with querier enabled and configured as specified in the description. 

IGMP snooping worked reliable. See some details below.
Tested with VMs on the external network. Configured querier as follows:
ovn-nbctl set Logical_Switch 620f6ceb-23d4-4cd8-b356-6ce614e46f18  other_config:mcast_eth_src=fa:16:3e:c4:31:a1
ovn-nbctl set Logical_Switch 620f6ceb-23d4-4cd8-b356-6ce614e46f18  other_config:mcast_ip4_src=

After this I've seen queries each 150 seconds (half of the idle_timeout, see below) as expected.
Clients were responding to the requests and were able to remain subscribed for a long time (note: without querier clients subscription was expiring automatically after idle_timeout of 300 seconds)

[heat-admin@controller-0 ~]$ ovn-nbctl show
switch 620f6ceb-23d4-4cd8-b356-6ce614e46f18 (neutron-2cd400a5-7ae4-430c-97d2-67a800d3821c) (aka nova)
    port provnet-0177dc61-3610-40f0-ab87-80c53e51b9f9
        type: localnet
        addresses: ["unknown"]
    port bce25bd5-d29f-4683-9d0f-4f41d559b644
        type: localport
        addresses: ["fa:16:3e:c4:31:a1"]
    port 015ae70e-c931-40e4-bc02-65c734c9ccb1
        addresses: ["fa:16:3e:d3:12:12 2620:52:0:13b8::1000:53"]
    port 38794e02-d68d-46f4-a6d0-01ffc3b23a32
        addresses: ["fa:16:3e:ff:19:05 2620:52:0:13b8::1000:95"]
    port 22c23731-1562-496b-a178-6ea7f6411f3d
        addresses: ["fa:16:3e:ba:ae:15 2620:52:0:13b8::1000:48"]
    port 50e05fb0-5d96-43f1-bb9c-8aa83772a637
        addresses: ["fa:16:3e:30:5a:f3 2620:52:0:13b8::1000:68"]

[heat-admin@controller-0 ~]$ ovn-nbctl list logical_switch
_uuid               : 620f6ceb-23d4-4cd8-b356-6ce614e46f18
acls                : []
dns_records         : []
external_ids        : {"neutron:mtu"="1500", "neutron:network_name"=nova, "neutron:revision_number"="4"}
forwarding_groups   : []
load_balancer       : []
name                : neutron-2cd400a5-7ae4-430c-97d2-67a800d3821c
other_config        : {mcast_eth_src="fa:16:3e:c4:31:a1", mcast_flood_unregistered="false", mcast_ip4_src="", mcast_snoop="true"}
ports               : [3d7b766f-1cd7-4024-8c69-f281c3baff4a, 50dc46c1-5f6b-4381-bf50-239d4c0d58eb, 73a32d4f-7abc-4c11-9fd3-d0c78b4840e4, 8d818d45-ddbe-49bd-8235-abf6c3365635, 9d333c4b-7972-4a31-bf50-628f6c835778, c7cae370-6fb4-4a47-a5b7-5358926402f1]
qos_rules           : []

[heat-admin@controller-0 ~]$ ovn-sbctl list ip_multicast
_uuid               : 3ce47104-3805-4aee-81fa-268b05bbe7d3
datapath            : 01eabea6-a967-41ec-ad6f-32c2a037c063
enabled             : true
eth_src             : "fa:16:3e:c4:31:a1"
idle_timeout        : 300
ip4_src             : ""
ip6_src             : ""
querier             : true
query_interval      : 150
query_max_resp      : 1
seq_no              : 0
table_size          : 2048

Comment 3 Roman Safronov 2020-11-18 09:28:51 UTC
A small addition to the previous comment.
I also had to configure the following:
ovn-nbctl set Logical_Switch 620f6ceb-23d4-4cd8-b356-6ce614e46f18  other_config:mcast_flood_unregistered="false"
In order to workaround the BZ https://bugzilla.redhat.com/show_bug.cgi?id=1898052

Note You need to log in before you can comment on or make changes to this bug.