Netdev List
 help / color / mirror / Atom feed
From: Vladimir Oltean <olteanv@gmail.com>
To: Arun Ramadoss <arun.ramadoss@microchip.com>
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	Paolo Abeni <pabeni@redhat.com>, Jakub Kicinski <kuba@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Vivien Didelot <vivien.didelot@gmail.com>,
	Andrew Lunn <andrew@lunn.ch>,
	UNGLinuxDriver@microchip.com,
	Woojung Huh <woojung.huh@microchip.com>
Subject: Re: [RFC patch net-next 1/3] net: dsa: ksz9477: port mirror sniffing limited to one port
Date: Wed, 27 Apr 2022 19:40:37 +0300	[thread overview]
Message-ID: <20220427164037.tpui4hm32hktasys@skbuf> (raw)
In-Reply-To: <20220427162343.18092-2-arun.ramadoss@microchip.com>

On Wed, Apr 27, 2022 at 09:53:41PM +0530, Arun Ramadoss wrote:
> This patch limits the sniffing to only one port during the mirror add.
> And during the mirror_del it checks for all the ports using the sniff,
> if and only if no other ports are referring, sniffing is disabled.
> The code is updated based on the review comments of LAN937x port mirror
> patch.
> https://patchwork.kernel.org/project/netdevbpf/patch/20210422094257.1641396-8-prasanna.vengateshan@microchip.com/
> 
> Signed-off-by: Prasanna Vengateshan <prasanna.vengateshan@microchip.com>
> Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com>
> ---

This probably needs:

Fixes: b987e98e50ab ("dsa: add DSA switch driver for Microchip KSZ9477")

with the mention that it probably won't be backported too far due to the
dependency on 0148bb50b8fd ("net: dsa: pass extack to dsa_switch_ops ::
port_mirror_add()"). But this doesn't change what you should do.

You should send it towards the "net" tree (probably right now), wait
until the "net" pull request for this gets sent out, then "net" gets
merged back into "net-next", then you can continue your work with the
other patches.

>  drivers/net/dsa/microchip/ksz9477.c | 38 ++++++++++++++++++++++++++---
>  1 file changed, 34 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
> index 4f617fee9a4e..90ce789107eb 100644
> --- a/drivers/net/dsa/microchip/ksz9477.c
> +++ b/drivers/net/dsa/microchip/ksz9477.c
> @@ -990,14 +990,32 @@ static int ksz9477_port_mirror_add(struct dsa_switch *ds, int port,
>  				   bool ingress, struct netlink_ext_ack *extack)
>  {
>  	struct ksz_device *dev = ds->priv;
> +	u8 data;
> +	int p;
> +
> +	/* Limit to one sniffer port
> +	 * Check if any of the port is already set for sniffing
> +	 * If yes, instruct the user to remove the previous entry & exit
> +	 */
> +	for (p = 0; p < dev->port_cnt; p++) {
> +		/* Skip the current sniffing port */
> +		if (p == mirror->to_local_port)
> +			continue;
> +
> +		ksz_pread8(dev, p, P_MIRROR_CTRL, &data);
> +
> +		if (data & PORT_MIRROR_SNIFFER) {
> +			NL_SET_ERR_MSG_MOD(extack,
> +					   "Sniffer port is already configured, delete existing rules & retry");
> +			return -EBUSY;
> +		}
> +	}
>  
>  	if (ingress)
>  		ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_RX, true);
>  	else
>  		ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_TX, true);
>  
> -	ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_SNIFFER, false);
> -
>  	/* configure mirror port */
>  	ksz_port_cfg(dev, mirror->to_local_port, P_MIRROR_CTRL,
>  		     PORT_MIRROR_SNIFFER, true);
> @@ -1011,16 +1029,28 @@ static void ksz9477_port_mirror_del(struct dsa_switch *ds, int port,
>  				    struct dsa_mall_mirror_tc_entry *mirror)
>  {
>  	struct ksz_device *dev = ds->priv;
> +	bool in_use = false;
>  	u8 data;
> +	int p;
>  
>  	if (mirror->ingress)
>  		ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_RX, false);
>  	else
>  		ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_TX, false);
>  
> -	ksz_pread8(dev, port, P_MIRROR_CTRL, &data);
>  
> -	if (!(data & (PORT_MIRROR_RX | PORT_MIRROR_TX)))
> +	/* Check if any of the port is still referring to sniffer port */
> +	for (p = 0; p < dev->port_cnt; p++) {
> +		ksz_pread8(dev, p, P_MIRROR_CTRL, &data);
> +
> +		if ((data & (PORT_MIRROR_RX | PORT_MIRROR_TX))) {
> +			in_use = true;
> +			break;
> +		}
> +	}
> +
> +	/* delete sniffing if there are no other mirroring rule exist */

Either "there are no other mirroring rules", or "no other mirroring rule
exists".

> +	if (!in_use)
>  		ksz_port_cfg(dev, mirror->to_local_port, P_MIRROR_CTRL,
>  			     PORT_MIRROR_SNIFFER, false);
>  }
> -- 
> 2.33.0
> 

  reply	other threads:[~2022-04-27 16:40 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-27 16:23 [RFC patch net-next 0/3] net: dsa: ksz: generic port mirror function for ksz9477 based switch Arun Ramadoss
2022-04-27 16:23 ` [RFC patch net-next 1/3] net: dsa: ksz9477: port mirror sniffing limited to one port Arun Ramadoss
2022-04-27 16:40   ` Vladimir Oltean [this message]
2022-04-27 16:23 ` [RFC patch net-next 2/3] net: dsa: ksz: remove duplicate ksz_cfg and ksz_port_cfg Arun Ramadoss
2022-04-27 16:49   ` Vladimir Oltean
2022-04-27 16:23 ` [RFC patch net-next 3/3] net: dsa: ksz: moved ksz9477 port mirror to ksz_common.c Arun Ramadoss
2022-04-27 16:57   ` Vladimir Oltean
2022-04-28 15:09     ` Arun.Ramadoss
2022-04-28 15:22       ` Vladimir Oltean
2022-04-28 16:05         ` Arun.Ramadoss

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220427164037.tpui4hm32hktasys@skbuf \
    --to=olteanv@gmail.com \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=andrew@lunn.ch \
    --cc=arun.ramadoss@microchip.com \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=vivien.didelot@gmail.com \
    --cc=woojung.huh@microchip.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox