From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2A133C46464 for ; Mon, 13 Aug 2018 03:17:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DA3702183C for ; Mon, 13 Aug 2018 03:17:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DA3702183C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728389AbeHMF6H (ORCPT ); Mon, 13 Aug 2018 01:58:07 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:33312 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728128AbeHMF6G (ORCPT ); Mon, 13 Aug 2018 01:58:06 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AB765401B3A9; Mon, 13 Aug 2018 03:17:51 +0000 (UTC) Received: from jason-ThinkPad-T450s.redhat.com (ovpn-12-183.pek2.redhat.com [10.72.12.183]) by smtp.corp.redhat.com (Postfix) with ESMTP id 98EAA2156712; Mon, 13 Aug 2018 03:17:48 +0000 (UTC) From: Jason Wang To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, jbrouer@redhat.com, mst@redhat.com, Jason Wang Subject: [RFC PATCH net-next V2 4/6] macvlan: count the number of vlan in source mode Date: Mon, 13 Aug 2018 11:17:28 +0800 Message-Id: <1534130250-5302-5-git-send-email-jasowang@redhat.com> In-Reply-To: <1534130250-5302-1-git-send-email-jasowang@redhat.com> References: <1534130250-5302-1-git-send-email-jasowang@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Mon, 13 Aug 2018 03:17:51 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Mon, 13 Aug 2018 03:17:51 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'jasowang@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch tries to count the number of vlans in source mode. This will be used for implementing XDP rx handler for macvlan. Signed-off-by: Jason Wang --- drivers/net/macvlan.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index cfda146..b7c814d 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -53,6 +53,7 @@ struct macvlan_port { struct hlist_head vlan_source_hash[MACVLAN_HASH_SIZE]; DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ); unsigned char perm_addr[ETH_ALEN]; + unsigned long source_count; }; struct macvlan_source_entry { @@ -1433,6 +1434,9 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev, if (err) goto unregister_netdev; + if (vlan->mode == MACVLAN_MODE_SOURCE) + port->source_count++; + list_add_tail_rcu(&vlan->list, &port->vlans); netif_stacked_transfer_operstate(lowerdev, dev); linkwatch_fire_event(dev); @@ -1477,6 +1481,7 @@ static int macvlan_changelink(struct net_device *dev, struct netlink_ext_ack *extack) { struct macvlan_dev *vlan = netdev_priv(dev); + struct macvlan_port *port = vlan->port; enum macvlan_mode mode; bool set_mode = false; enum macvlan_macaddr_mode macmode; @@ -1491,8 +1496,10 @@ static int macvlan_changelink(struct net_device *dev, (vlan->mode == MACVLAN_MODE_PASSTHRU)) return -EINVAL; if (vlan->mode == MACVLAN_MODE_SOURCE && - vlan->mode != mode) + vlan->mode != mode) { macvlan_flush_sources(vlan->port, vlan); + port->source_count--; + } } if (data && data[IFLA_MACVLAN_FLAGS]) { @@ -1510,8 +1517,13 @@ static int macvlan_changelink(struct net_device *dev, } vlan->flags = flags; } - if (set_mode) + if (set_mode) { vlan->mode = mode; + if (mode == MACVLAN_MODE_SOURCE && + vlan->mode != mode) { + port->source_count++; + } + } if (data && data[IFLA_MACVLAN_MACADDR_MODE]) { if (vlan->mode != MACVLAN_MODE_SOURCE) return -EINVAL; -- 2.7.4