DPDK patches and discussions
 help / color / mirror / Atom feed
From: Chas Williams <3chas3@gmail.com>
To: Matan Azrad <matan@mellanox.com>
Cc: Declan Doherty <declan.doherty@intel.com>,
	Radu Nicolau <radu.nicolau@intel.com>,
	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 17:05:20 -0400	[thread overview]
Message-ID: <CAG2-Gk=TQvwi9onApZhr9O9Gxqk3PurvyRVq_ag=B9dvekBU4Q@mail.gmail.com> (raw)
In-Reply-To: <AM0PR0502MB4019A295821D30493DFC5D24D22C0@AM0PR0502MB4019.eurprd05.prod.outlook.com>

On Thu, Aug 2, 2018 at 10:24 AM Matan Azrad <matan@mellanox.com> wrote:

> 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?
>

Not a good idea.  The slave should do what it needs to go to get subscribed
to the multicast group.  For the user to make this decision ahead of time,
he would have to know that all the PMDs support the same method.  Forcing
more and more work on the caller of the API is not a solution.


>
> Matan.
>
>
>

  parent reply	other threads:[~2018-08-02 21:05 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
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 [this message]
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='CAG2-Gk=TQvwi9onApZhr9O9Gxqk3PurvyRVq_ag=B9dvekBU4Q@mail.gmail.com' \
    --to=3chas3@gmail.com \
    --cc=chas3@att.com \
    --cc=declan.doherty@intel.com \
    --cc=dev@dpdk.org \
    --cc=matan@mellanox.com \
    --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).