DPDK patches and discussions
 help / color / mirror / Atom feed
From: Matan Azrad <matan@mellanox.com>
To: "Doherty, Declan" <declan.doherty@intel.com>,
	Chas Williams <3chas3@gmail.com>,
	Radu Nicolau <radu.nicolau@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>, Chas Williams <chas3@att.com>
Subject: Re: [dpdk-dev] [PATCH] net/bonding: propagate promiscous mode in mode 4
Date: Thu, 2 Aug 2018 14:24:52 +0000	[thread overview]
Message-ID: <AM0PR0502MB4019A295821D30493DFC5D24D22C0@AM0PR0502MB4019.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <017918fc-70dc-e6d3-6e9f-35bf9bd73fc3@intel.com>

Hi

From: Doherty, Declan
> On 02/08/2018 7:35 AM, Matan Azrad wrote:
> > Hi Chas, Radu
> >
> > From: Chas Williams
> >> On Wed, Aug 1, 2018 at 9:48 AM Radu Nicolau <radu.nicolau@intel.com>
> >> wrote:
> >>
> >>>
> >>>
> >>> On 8/1/2018 2:34 PM, Chas Williams wrote:
> >>>
> >>>
> >>>
> >>> On Wed, Aug 1, 2018 at 9:04 AM Radu Nicolau <radu.nicolau@intel.com>
> >>> wrote:
> >>>
> >>>> Update the bonding promiscuous mode enable/disable functions as to
> >>>> propagate the change to all slaves instead of doing nothing; this
> >>>> seems to be the correct behaviour according to the standard, and
> >>>> also implemented in the linux network stack.
> >>>>
> >>>> Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
> >>>> ---
> >>>>   drivers/net/bonding/rte_eth_bond_pmd.c | 8 ++------
> >>>>   1 file changed, 2 insertions(+), 6 deletions(-)
> >>>>
> >>>> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c
> >>>> b/drivers/net/bonding/rte_eth_bond_pmd.c
> >>>> index ad6e33f..16105cb 100644
> >>>> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
> >>>> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
> >>>> @@ -2617,12 +2617,10 @@ bond_ethdev_promiscuous_enable(struct
> >>>> rte_eth_dev
> >>>> *eth_dev)
> >>>>          case BONDING_MODE_ROUND_ROBIN:
> >>>>          case BONDING_MODE_BALANCE:
> >>>>          case BONDING_MODE_BROADCAST:
> >>>> +       case BONDING_MODE_8023AD:
> >>>>                  for (i = 0; i < internals->slave_count; i++)
> >>>>
> >>>> rte_eth_promiscuous_enable(internals->slaves[i].port_id);
> >>>>                  break;
> >>>> -       /* In mode4 promiscus mode is managed when slave is
> >> added/removed
> >>>> */
> >>>>
> >>>
> >>> This comment is true (and it appears it is always on in 802.3ad mode):
> >>>
> >>>          /* use this port as agregator */
> >>>          port->aggregator_port_id = slave_id;
> >>>          rte_eth_promiscuous_enable(slave_id);
> >>>
> >>> If we are going to do this here, we should probably get rid of it in
> >>> the other location so that future readers aren't confused about
> >>> which is the one doing the work.
> >>>
> >>> Since some adapters don't have group multicast support, we might
> >>> already be in promiscuous anyway.  Turning off promiscuous for the
> >>> bonding master might turn it off in the slaves where an application
> >>> has already enabled it.
> >>>
> >>>
> >>> The idea was to preserve the current behavior except for the
> >>> explicit promiscuous disable/enable APIs; an application may disable
> >>> the promiscuous mode on the bonding port and then enable it back,
> >>> expecting it to propagate to the slaves.
> >>>
> >>
> >> Yes, but an application doing that will break 802.3ad because
> >> promiscuous mode is used to receive the LAG PDUs which are on a multicast
> group.
> >> That's why this code doesn't let you disable promiscuous when you are
> >> in 802.3ad mode.
> >>
> >> If you want to do this it needs to be more complicated.  In 802.3ad,
> >> you should try to add the multicast group to the slave interface.  If
> >> that fails, turn on promisc mode for the slave.  Make note of it.
> >> Later if bonding wants to enabled/disable promisc mode for the
> >> slaves, it needs to check if that slaves needs to remain in promisc to
> continue to get the LAG PDUs.
> >
> > I agree with Chas that this commit will hurt current LACP logic, but maybe
> this is the time to open discussion about it:
> > The current bonding implementation is greedy while it setting
> > promiscuous automatically for LACP, The user asks LACP and he gets
> promiscuous by the way.
> >
> > So if the user don't want promiscuous he must to disable it directly via slaves
> ports and to allow LACP using rte_flow\flow
> director\set_mc_addr_list\allmulti...
> >
> > I think the best way is to let the user to enable LACP  as he wants, directly via
> slaves or by the bond promiscuous_enable API.
> > For sure, it must be documented well.
> >
> > Matan.
> >
> 
> I'm thinking that default behavior should be that promiscuous mode should be
> disabled by default, and that the bond port should fail to start if any of the slave
> ports can't support subscription to the LACP multicast group. At this point the
> user can decided to enable promiscuous mode on the bond port (and therefore
> on all the slaves) and then start the bond. If we have slaves with different
> configurations for multicast subscriptions or promiscuous mode enablement,
> then there is potentially the opportunity for inconsistency in traffic depending
> on which slaves are active.

> Personally I would prefer that all configuration if possible is propagated
> through the bond port. So if a user wants to use a port which doesn't support
> multicast subscription then all ports in the bond need to be in promiscuous
> mode, and the user needs to explicitly enable it through the bond port, that way
> at least we can guarantee consist traffic irrespective of which ports in the bond
> are active at any one time.

That's exactly what I said :)

I suggest to do it like next,
To add one more parameter for LACP which means how to configure the LACP MC group - lacp_mc_grp_conf:
1. rte_flow.
2. flow director.
3. add_mac.
3. set_mc_add_list
4. allmulti
5. promiscuous
Maybe more... or less :)

By this way the user decides how to do it, if it's fail for a slave, the salve should be rejected.
Conflict with another configuration(for example calling to promiscuous disable while running LACP lacp_mc_grp_conf=5) should raise an error.

What do you think?

Matan.



  reply	other threads:[~2018-08-02 14:24 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-01 12:57 Radu Nicolau
2018-08-01 13:34 ` Chas Williams
2018-08-01 13:47   ` Radu Nicolau
2018-08-01 15:35     ` Chas Williams
2018-08-02  6:35       ` Matan Azrad
2018-08-02 13:23         ` Doherty, Declan
2018-08-02 14:24           ` Matan Azrad [this message]
2018-08-02 15:53             ` Doherty, Declan
2018-08-02 17:33               ` Matan Azrad
2018-08-02 21:10                 ` Chas Williams
2018-08-03  5:47                   ` Matan Azrad
2018-08-06 16:00                     ` Chas Williams
2018-08-06 17:46                       ` Matan Azrad
2018-08-06 19:01                         ` Chas Williams
2018-08-06 19:35                           ` Matan Azrad
2018-09-11  3:31                             ` Chas Williams
2018-09-12  5:56                               ` Matan Azrad
2018-09-13 15:14                                 ` Chas Williams
2018-09-13 15:40                                   ` Matan Azrad
2018-09-16 16:14                                     ` Chas Williams
2018-09-17  6:29                                       ` Matan Azrad
2018-08-02 21:05             ` Chas Williams
2018-08-02  9:57 ` [dpdk-dev] [PATCH v2 1/2] net/bonding: in 8023ad mode enable all multicast rather than promiscuous Radu Nicolau
2018-08-02  9:57   ` [dpdk-dev] [PATCH v2 2/2] net/bonding: propagate promiscous mode in mode 4 Radu Nicolau
2018-08-02 10:21   ` [dpdk-dev] [PATCH v2 1/2] net/bonding: in 8023ad mode enable all multicast rather than promiscuous Matan Azrad
2018-08-02 21:16   ` Chas Williams

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=AM0PR0502MB4019A295821D30493DFC5D24D22C0@AM0PR0502MB4019.eurprd05.prod.outlook.com \
    --to=matan@mellanox.com \
    --cc=3chas3@gmail.com \
    --cc=chas3@att.com \
    --cc=declan.doherty@intel.com \
    --cc=dev@dpdk.org \
    --cc=radu.nicolau@intel.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;
as well as URLs for NNTP newsgroup(s).