Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2029545pxj; Sun, 9 May 2021 12:47:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwtcYxqoCAN0+dytiSVDFY3QMKd2drrKpMThTFIxH8X9jAiNzlbmfOL+DXLJDQOCy2huVbC X-Received: by 2002:aa7:cb10:: with SMTP id s16mr25534806edt.313.1620589621887; Sun, 09 May 2021 12:47:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620589621; cv=none; d=google.com; s=arc-20160816; b=ILls6C3j4MpBVzsaj65f0ZYdGGCSGHJ2zYoHSs3DFaRRKIe6uQ0pjVteDqcVeeAwW6 6kXq5x0B8+AdUXDIbQuoaatbzR8r7c6m+JTnuTCV44nRlCkMicRUIcHHuZdks1vKaDEG 3PwQXof/F5uy9dqlSDaHzi6j2cujSF4ljRy230dTiH6qk4VSGkzLvJNvIHuPzksqd69u eHHbcto7BdRSw0Nd8mTao5XExp/hB1wuhMcvSoI+agjXRZrQ0hwE1sq9qTzZiKPXJ9to 0DjyWlyYinzI1wcQDFncgdyR1cxci/98VMtAQO4KvAaSgY7OnBx80uf49djvUbxHmjeO 5/+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=9D8FEzJHgkNISK7B+SDwEMW53mNMVjQN11fNP24SGEs=; b=he9DWTaWYeTi9wyBJ9uVa8OZnZDtk4bxqzMKwd7ypFux95+AdJgUe09eCmbwJoFAa1 M4xzCbI/DhQlno+5jvlMSqW1bcS+JMW9Gn1cGlIKupiWMjifvbM0V5RQH4SsNnnSHBng 4+Iatqdrc0eOZwA+pkhASSPtRSRHZ4MWLaZdg1Sw2VI27umXF9Va0PJ+oBo6MheXD0AC 2ggAc5qR1T3F7TiB47hPtRfzDMMPDbu3OtmEGswpotXxIxPgAUg6ufYcr50sBFGHGoHf bR1DNv3vbFa6Lj6Epkszq6KUIPOslw2cAq7toEzDIcZ++xsEaMBD+8uLnFACmi5qfK2Z LhIQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b1si11574846edq.36.2021.05.09.12.46.38; Sun, 09 May 2021 12:47:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230021AbhEITql (ORCPT + 99 others); Sun, 9 May 2021 15:46:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229936AbhEITq3 (ORCPT ); Sun, 9 May 2021 15:46:29 -0400 Received: from mail.aperture-lab.de (mail.aperture-lab.de [IPv6:2a01:4f8:c2c:665b::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17290C06175F; Sun, 9 May 2021 12:45:26 -0700 (PDT) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 5117E3EDDE; Sun, 9 May 2021 21:45:24 +0200 (CEST) From: =?UTF-8?q?Linus=20L=C3=BCssing?= To: netdev@vger.kernel.org Cc: Roopa Prabhu , Nikolay Aleksandrov , Jakub Kicinski , "David S . Miller" , bridge@lists.linux-foundation.org, b.a.t.m.a.n@lists.open-mesh.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Linus=20L=C3=BCssing?= Subject: [net-next v2 03/11] net: bridge: mcast: prepare mdb netlink for mcast router split Date: Sun, 9 May 2021 21:45:01 +0200 Message-Id: <20210509194509.10849-4-linus.luessing@c0d3.blue> In-Reply-To: <20210509194509.10849-1-linus.luessing@c0d3.blue> References: <20210509194509.10849-1-linus.luessing@c0d3.blue> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Last-TLS-Session-Version: TLSv1.2 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In preparation for the upcoming split of multicast router state into their IPv4 and IPv6 variants and to avoid IPv6 #ifdef clutter later add some inline functions for the protocol specific parts in the mdb router netlink code. Also the we need iterate over the port instead of router list to be able put one router port entry with both the IPv4 and IPv6 multicast router info later. Signed-off-by: Linus Lüssing --- net/bridge/br_mdb.c | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c index d61def8..6937d3b 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c @@ -16,29 +16,58 @@ #include "br_private.h" +static inline bool br_rports_have_mc_router(struct net_bridge *br) +{ + return !hlist_empty(&br->ip4_mc_router_list); +} + +static inline bool +br_ip4_rports_get_timer(struct net_bridge_port *port, unsigned long *timer) +{ + *timer = br_timer_value(&port->ip4_mc_router_timer); + return !hlist_unhashed(&port->ip4_rlist); +} + +static inline bool +br_ip6_rports_get_timer(struct net_bridge_port *port, unsigned long *timer) +{ + *timer = 0; + return false; +} + static int br_rports_fill_info(struct sk_buff *skb, struct netlink_callback *cb, struct net_device *dev) { struct net_bridge *br = netdev_priv(dev); - struct net_bridge_port *p; + bool have_ip4_mc_rtr, have_ip6_mc_rtr; + unsigned long ip4_timer, ip6_timer; struct nlattr *nest, *port_nest; + struct net_bridge_port *p; - if (!br->multicast_router || hlist_empty(&br->ip4_mc_router_list)) + if (!br->multicast_router) + return 0; + + if (!br_rports_have_mc_router(br)) return 0; nest = nla_nest_start_noflag(skb, MDBA_ROUTER); if (nest == NULL) return -EMSGSIZE; - hlist_for_each_entry_rcu(p, &br->ip4_mc_router_list, ip4_rlist) { - if (!p) + list_for_each_entry_rcu(p, &br->port_list, list) { + have_ip4_mc_rtr = br_ip4_rports_get_timer(p, &ip4_timer); + have_ip6_mc_rtr = br_ip6_rports_get_timer(p, &ip6_timer); + + if (!have_ip4_mc_rtr && !have_ip6_mc_rtr) continue; + port_nest = nla_nest_start_noflag(skb, MDBA_ROUTER_PORT); if (!port_nest) goto fail; + if (nla_put_nohdr(skb, sizeof(u32), &p->dev->ifindex) || nla_put_u32(skb, MDBA_ROUTER_PATTR_TIMER, - br_timer_value(&p->ip4_mc_router_timer)) || + max(ip4_timer, ip6_timer)) || nla_put_u8(skb, MDBA_ROUTER_PATTR_TYPE, p->multicast_router)) { nla_nest_cancel(skb, port_nest); -- 2.31.0