DPDK patches and discussions
 help / color / mirror / Atom feed
From: Mordechay Haimovsky <motih@mellanox.com>
To: Shahaf Shuler <shahafs@mellanox.com>,
	Adrien Mazarguil <adrienm@mellanox.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>, "stable@dpdk.org" <stable@dpdk.org>
Subject: Re: [dpdk-dev] [dpdk-stable] [PATCH] net/mlx4: fix no broadcasts reception in	promisc
Date: Thu, 25 Jan 2018 17:12:09 +0000	[thread overview]
Message-ID: <AM4PR05MB3201DF1FF6240C0C4B0C6DCFD2E10@AM4PR05MB3201.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <VI1PR05MB31499AE6030F4FCB520F6EC4C3E10@VI1PR05MB3149.eurprd05.prod.outlook.com>

The mlx4 does not support "don't care" bits in its flow spec mask, therefore we do cannot use 
The following rules used by mlx5 for promiscuous and allmulti:
        if (dev->data->promiscuous) {
                struct rte_flow_item_eth promisc = {
                        .dst.addr_bytes = "\x00\x00\x00\x00\x00\x00",
                        .src.addr_bytes = "\x00\x00\x00\x00\x00\x00",
                        .type = 0,
                };

                claim_zero(mlx5_ctrl_flow(dev, &promisc, &promisc));
                return 0;
        }
        if (dev->data->all_multicast) {
                struct rte_flow_item_eth multicast = {
                        .dst.addr_bytes = "\x01\x00\x00\x00\x00\x00",
                        .src.addr_bytes = "\x00\x00\x00\x00\x00\x00",
                        .type = 0,
                };

What we can use instead  In order to place the device in promiscuous mode is:
    struct all_flow_attr {
        struct ibv_flow_attr     attr;
    } __attribute__((packed)) all_attr = {
        .attr = {
            .comp_mask  = 0,
            .type       = IBV_FLOW_ATTR_ALL_DEFAULT,
            .size       = sizeof(all_attr),
            .priority   = 0,
            .num_of_specs = 0,
            .port       = PORT_NUM,
            .flags      = 0,
        },
    };
    struct ibv_flow *all_flow;
    all_flow = ibv_create_flow(qp, &all_attr.attr);

Now *_DEFAULT rules are low priority rules which catch the appropriate traffic which was not caught by another rule.
There is probably another rule for BC which is added in the driver  that catches the BC, that is why we do not see it. 
When we add an additional BC rule, we will also get it.

Moti

> -----Original Message-----
> From: Shahaf Shuler
> Sent: Thursday, January 25, 2018 5:38 PM
> To: Mordechay Haimovsky <motih@mellanox.com>; Adrien Mazarguil
> <adrienm@mellanox.com>
> Cc: dev@dpdk.org; Mordechay Haimovsky <motih@mellanox.com>;
> stable@dpdk.org
> Subject: RE: [dpdk-stable] [PATCH] net/mlx4: fix no broadcasts reception in
> promisc
> 
> Sunday, January 7, 2018 1:05 PM, Moti Haimovsky
> > Subject: [dpdk-stable] [PATCH] net/mlx4: fix no broadcasts reception
> > in promisc
> >
> > This patch fixes the issue of mlx4 not receiving broadcast packets
> > when configured to work promiscuous mode.
> >
> > Fixes: eacaac7bae36 ("net/mlx4: restore promisc and allmulti support")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Moti Haimovsky <motih@mellanox.com>
> > ---
> >  drivers/net/mlx4/mlx4_flow.c | 16 ++++++++--------
> >  1 file changed, 8 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/net/mlx4/mlx4_flow.c
> > b/drivers/net/mlx4/mlx4_flow.c index 69025da..ec13f5a 100644
> > --- a/drivers/net/mlx4/mlx4_flow.c
> > +++ b/drivers/net/mlx4/mlx4_flow.c
> > @@ -1223,9 +1223,12 @@ struct mlx4_drop {
> >   *
> >   * Various flow rules are created depending on the mode the device is in:
> >   *
> > - * 1. Promiscuous: port MAC + catch-all (VLAN filtering is ignored).
> > - * 2. All multicast: port MAC/VLAN + catch-all multicast.
> > - * 3. Otherwise: port MAC/VLAN + broadcast MAC/VLAN.
> > + * 1. Promiscuous:
> > + *       port MAC + broadcast + catch-all (VLAN filtering is ignored).
> > + * 2. All multicast:
> > + *       port MAC/VLAN + broadcast + catch-all multicast.
> > + * 3. Otherwise:
> > + *       port MAC/VLAN + broadcast MAC/VLAN.
> >   *
> >   * About MAC flow rules:
> >   *
> > @@ -1304,9 +1307,6 @@ struct mlx4_drop {
> >  		!priv->dev->data->promiscuous ?
> >  		&vlan_spec.tci :
> >  		NULL;
> > -	int broadcast =
> > -		!priv->dev->data->promiscuous &&
> > -		!priv->dev->data->all_multicast;
> >  	uint16_t vlan = 0;
> >  	struct rte_flow *flow;
> >  	unsigned int i;
> > @@ -1340,7 +1340,7 @@ struct mlx4_drop {
> >  			rule_vlan = NULL;
> >  		}
> >  	}
> > -	for (i = 0; i != RTE_DIM(priv->mac) + broadcast; ++i) {
> > +	for (i = 0; i != RTE_DIM(priv->mac) + 1; ++i) {
> >  		const struct ether_addr *mac;
> >
> >  		/* Broadcasts are handled by an extra iteration. */ @@ -
> > 1404,7 +1404,7 @@ struct mlx4_drop {
> >  			goto next_vlan;
> >  	}
> >  	/* Take care of promiscuous and all multicast flow rules. */
> > -	if (!broadcast) {
> > +	if (priv->dev->data->promiscuous || priv->dev->data->all_multicast)
> 
> Please help me to understand the issue.
> The promisc and allmulti spec and mask contains the broadcast addresses.
> They are not received because of the ibv flow rule type (MC_DEFAULT /
> ALL_DEFAULT) ?
> 
> > {
> >  		for (flow = LIST_FIRST(&priv->flows);
> >  		     flow && flow->internal;
> >  		     flow = LIST_NEXT(flow, next)) {
> > --
> > 1.8.3.1

  reply	other threads:[~2018-01-25 17:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-07 11:04 [dpdk-dev] " Moti Haimovsky
2018-01-25 15:37 ` [dpdk-dev] [dpdk-stable] " Shahaf Shuler
2018-01-25 17:12   ` Mordechay Haimovsky [this message]
2018-01-25 17:45     ` Shahaf Shuler
2018-01-26 17:03 ` [dpdk-dev] " Adrien Mazarguil

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=AM4PR05MB3201DF1FF6240C0C4B0C6DCFD2E10@AM4PR05MB3201.eurprd05.prod.outlook.com \
    --to=motih@mellanox.com \
    --cc=adrienm@mellanox.com \
    --cc=dev@dpdk.org \
    --cc=shahafs@mellanox.com \
    --cc=stable@dpdk.org \
    /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;
as well as URLs for NNTP newsgroup(s).