From 6a3006116945234a5ad8e88f9cf86a4c4212b1f2 Mon Sep 17 00:00:00 2001 From: Dumitru Ceara Date: Thu, 27 Aug 2020 16:47:33 +0200 Subject: [PATCH] pinctrl: Fix incorrect warning message for multicast querier. It's quite common that IP Multicast is enabled only for IPv4 or only for IPv6. In such cases ovn-controller should not generate warnings. Fixes: 677a3ba4d66b ("ovn: Add MLD support.") Signed-off-by: Dumitru Ceara Signed-off-by: Numan Siddique (cherry-picked from master commit d6d59911412edc20c40c026a1bb8c48ef01800fb) (cherry picked from upstream commit be614f0743abe605c4305003c9de6859dd224fe9) Change-Id: I9fbd75723fdd163e4129106b378f7fb71a0e6877 --- controller/pinctrl.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/controller/pinctrl.c b/controller/pinctrl.c index f72ab70..c8fbd37 100644 --- a/controller/pinctrl.c +++ b/controller/pinctrl.c @@ -4183,21 +4183,11 @@ ip_mcast_snoop_cfg_load(struct ip_mcast_snoop_cfg *cfg, cfg->seq_no = ip_mcast->seq_no; if (querier_enabled) { - /* Try to parse the source ETH address. */ - if (!ip_mcast->eth_src || - !eth_addr_from_string(ip_mcast->eth_src, - &cfg->query_eth_src)) { - VLOG_WARN_RL(&rl, - "IGMP Querier enabled with invalid ETH src address"); - /* Failed to parse the ETH source address. Disable the querier. */ - cfg->querier_v4_enabled = false; - cfg->querier_v6_enabled = false; - } - /* Try to parse the source IPv4 address. */ if (cfg->querier_v4_enabled) { - if (!ip_mcast->ip4_src || - !ip_parse(ip_mcast->ip4_src, &cfg->query_ipv4_src)) { + if (!ip_mcast->ip4_src || !ip_mcast->ip4_src[0]) { + cfg->querier_v4_enabled = false; + } else if (!ip_parse(ip_mcast->ip4_src, &cfg->query_ipv4_src)) { VLOG_WARN_RL(&rl, "IGMP Querier enabled with invalid IPv4 " "src address"); @@ -4215,8 +4205,9 @@ ip_mcast_snoop_cfg_load(struct ip_mcast_snoop_cfg *cfg, /* Try to parse the source IPv6 address. */ if (cfg->querier_v6_enabled) { - if (!ip_mcast->ip6_src || - !ipv6_parse(ip_mcast->ip6_src, &cfg->query_ipv6_src)) { + if (!ip_mcast->ip6_src || !ip_mcast->ip6_src[0]) { + cfg->querier_v6_enabled = false; + } else if (!ipv6_parse(ip_mcast->ip6_src, &cfg->query_ipv6_src)) { VLOG_WARN_RL(&rl, "MLD Querier enabled with invalid IPv6 " "src address"); @@ -4232,6 +4223,23 @@ ip_mcast_snoop_cfg_load(struct ip_mcast_snoop_cfg *cfg, cfg->query_ipv6_dst = (struct in6_addr)IN6ADDR_ALL_HOSTS_INIT; } + + if (!cfg->querier_v4_enabled && !cfg->querier_v6_enabled) { + VLOG_WARN_RL(&rl, + "IGMP Querier enabled without a valid IPv4 or IPv6 " + "address"); + } + + /* Try to parse the source ETH address. */ + if (!ip_mcast->eth_src || + !eth_addr_from_string(ip_mcast->eth_src, + &cfg->query_eth_src)) { + VLOG_WARN_RL(&rl, + "IGMP Querier enabled with invalid ETH src address"); + /* Failed to parse the ETH source address. Disable the querier. */ + cfg->querier_v4_enabled = false; + cfg->querier_v6_enabled = false; + } } } -- 1.8.3.1