DPDK patches and discussions
 help / color / Atom feed
* [dpdk-dev] [PATCH] fix lacp check system address
@ 2019-11-25 13:13 Vadim
  2019-11-25 22:25 ` Stephen Hemminger
  0 siblings, 1 reply; 6+ messages in thread
From: Vadim @ 2019-11-25 13:13 UTC (permalink / raw)
  To: chas3; +Cc: dev, podovinnikov

From: podovinnikov <podovinnikov@protei.ru>

---
 drivers/net/bonding/rte_eth_bond_8023ad.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index b77a37ddb..132ff74a1 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -792,18 +792,38 @@ rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
 		struct rte_mbuf *lacp_pkt) {
 	struct lacpdu_header *lacp;
 	struct lacpdu_actor_partner_params *partner;
+	struct port *port, *agg;
 
 	if (lacp_pkt != NULL) {
 		lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
 		RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
 
 		partner = &lacp->lacpdu.partner;
+		port = &bond_mode_8023ad_ports[slave_id];
+		agg = &bond_mode_8023ad_ports[port->aggregator_port_id];
+
 		if (rte_is_same_ether_addr(&partner->port_params.system,
-			&internals->mode4.mac_addr)) {
+									&agg->actor.system)) {
 			/* This LACP frame is sending to the bonding port
 			 * so pass it to rx_machine.
 			 */
 			rx_machine(internals, slave_id, &lacp->lacpdu);
+		} else {
+			MODE4_DEBUG("prefered partner system %02x:%02x:%02x:%02x:%02x:%02x "
+				"not equal self system: %02x:%02x:%02x:%02x:%02x:%02x\n",
+			partner->port_params.system.addr_bytes[0],
+			partner->port_params.system.addr_bytes[1],
+			partner->port_params.system.addr_bytes[2],
+			partner->port_params.system.addr_bytes[3],
+			partner->port_params.system.addr_bytes[4],
+			partner->port_params.system.addr_bytes[5],
+
+			agg->actor.system.addr_bytes[0],
+			agg->actor.system.addr_bytes[1],
+			agg->actor.system.addr_bytes[2],
+			agg->actor.system.addr_bytes[3],
+			agg->actor.system.addr_bytes[4],
+			agg->actor.system.addr_bytes[5]);
 		}
 		rte_pktmbuf_free(lacp_pkt);
 	} else
-- 
2.17.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] [PATCH] fix lacp check system address
  2019-11-25 13:13 [dpdk-dev] [PATCH] fix lacp check system address Vadim
@ 2019-11-25 22:25 ` Stephen Hemminger
  2019-11-26 11:45   ` [dpdk-dev] [PATCH v2] " Vadim
  0 siblings, 1 reply; 6+ messages in thread
From: Stephen Hemminger @ 2019-11-25 22:25 UTC (permalink / raw)
  To: Vadim; +Cc: chas3, dev

On Mon, 25 Nov 2019 16:13:26 +0300
Vadim <podovinnikov@protei.ru> wrote:

> +			MODE4_DEBUG("prefered partner system %02x:%02x:%02x:%02x:%02x:%02x "
> +				"not equal self system: %02x:%02x:%02x:%02x:%02x:%02x\n",
> +			partner->port_params.system.addr_bytes[0],
> +			partner->port_params.system.addr_bytes[1],
> +			partner->port_params.system.addr_bytes[2],
> +			partner->port_params.system.addr_bytes[3],
> +			partner->port_params.system.addr_bytes[4],
> +			partner->port_params.system.addr_bytes[5],
> +
> +			agg->actor.system.addr_bytes[0],
> +			agg->actor.system.addr_bytes[1],
> +			agg->actor.system.addr_bytes[2],
> +			agg->actor.system.addr_bytes[3],
> +			agg->actor.system.addr_bytes[4],
> +			agg->actor.system.addr_bytes[5]);

Why not use rte_ether_format_addr instead?

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-dev] [PATCH v2] fix lacp check system address
  2019-11-25 22:25 ` Stephen Hemminger
@ 2019-11-26 11:45   ` " Vadim
  0 siblings, 0 replies; 6+ messages in thread
From: Vadim @ 2019-11-26 11:45 UTC (permalink / raw)
  To: chas3; +Cc: dev, Vadim

Signed-off-by: Vadim <podovinnikov@protei.ru>

fix lacp check system address

---
 drivers/net/bonding/rte_eth_bond_8023ad.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index b77a37ddb..d4dda790a 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -792,18 +792,33 @@ rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
 		struct rte_mbuf *lacp_pkt) {
 	struct lacpdu_header *lacp;
 	struct lacpdu_actor_partner_params *partner;
+	struct port *port, *agg;
 
 	if (lacp_pkt != NULL) {
 		lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
 		RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
 
 		partner = &lacp->lacpdu.partner;
+		port = &bond_mode_8023ad_ports[slave_id];
+		agg = &bond_mode_8023ad_ports[port->aggregator_port_id];
+
 		if (rte_is_same_ether_addr(&partner->port_params.system,
-			&internals->mode4.mac_addr)) {
+							&agg->actor.system)) {
 			/* This LACP frame is sending to the bonding port
 			 * so pass it to rx_machine.
 			 */
 			rx_machine(internals, slave_id, &lacp->lacpdu);
+		} else {
+			char preferred_system_name[RTE_ETHER_ADDR_FMT_SIZE];
+			char self_system_name[RTE_ETHER_ADDR_FMT_SIZE];
+			rte_ether_format_addr(preferred_system_name,
+						RTE_ETHER_ADDR_FMT_SIZE,
+						&partner->port_params.system);
+			rte_ether_format_addr(self_system_name,
+				RTE_ETHER_ADDR_FMT_SIZE, &agg->actor.system);
+			MODE4_DEBUG("preferred partner system %s not equal "
+						"self system: %s\n",
+				preferred_system_name, self_system_name);
 		}
 		rte_pktmbuf_free(lacp_pkt);
 	} else
-- 
2.24.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] [PATCH v2] fix lacp check system address
  2019-11-26 13:27   ` Ferruh Yigit
@ 2019-11-26 15:09     ` podovinnikov
  0 siblings, 0 replies; 6+ messages in thread
From: podovinnikov @ 2019-11-26 15:09 UTC (permalink / raw)
  To: Ferruh Yigit, linville; +Cc: dev, Chas Williams

Hi Ferruh

> This is bonding patch, please cc bonding maintainers (Chas, instead of John W.
> Linville).
Sorry about that. I have 2 patches ( one for af packet, one for bonding).

I am a little confused.


> Can you please give more details, what is failing what is the impact etc.

In bond (lacp) we have several nics ( ports )

When we have negotiation with peer about what port we prefer,

we send information about what system we preferred in partner system 
name field.

Peer also sends us what partner system name it prefer.

When we receive a message from it we must compare its preferred

system name with our system name, but not with our port mac address

In my test I have several problems with that

1. If master port (mac address same as system address)

shuts down (I have two ports) I loose connection

2. If secondary port (mac address not same as system address)

receives message before master port, my connection is not established.


26.11.2019 16:27, Ferruh Yigit пишет:
> Hi Vadim,
>
> On 11/26/2019 11:55 AM, Vadim wrote:
>> Signed-off-by: Vadim <podovinnikov@protei.ru>
> Can you please provide full "Name Surname <email@adress>" signature?
>
>
> This is bonding patch, please cc bonding maintainers (Chas, instead of John W.
> Linville).
>
>> fix lacp check system address
> Can you please give more details, what is failing what is the impact etc.
>
>> ---
>>   drivers/net/bonding/rte_eth_bond_8023ad.c | 17 ++++++++++++++++-
>>   1 file changed, 16 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
>> index b77a37ddb..d4dda790a 100644
>> --- a/drivers/net/bonding/rte_eth_bond_8023ad.c
>> +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
>> @@ -792,18 +792,33 @@ rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
>>   		struct rte_mbuf *lacp_pkt) {
>>   	struct lacpdu_header *lacp;
>>   	struct lacpdu_actor_partner_params *partner;
>> +	struct port *port, *agg;
>>   
>>   	if (lacp_pkt != NULL) {
>>   		lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
>>   		RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
>>   
>>   		partner = &lacp->lacpdu.partner;
>> +		port = &bond_mode_8023ad_ports[slave_id];
>> +		agg = &bond_mode_8023ad_ports[port->aggregator_port_id];
>> +
>>   		if (rte_is_same_ether_addr(&partner->port_params.system,
>> -			&internals->mode4.mac_addr)) {
>> +							&agg->actor.system)) {
>>   			/* This LACP frame is sending to the bonding port
>>   			 * so pass it to rx_machine.
>>   			 */
>>   			rx_machine(internals, slave_id, &lacp->lacpdu);
>> +		} else {
>> +			char preferred_system_name[RTE_ETHER_ADDR_FMT_SIZE];
>> +			char self_system_name[RTE_ETHER_ADDR_FMT_SIZE];
>> +			rte_ether_format_addr(preferred_system_name,
>> +						RTE_ETHER_ADDR_FMT_SIZE,
>> +						&partner->port_params.system);
>> +			rte_ether_format_addr(self_system_name,
>> +				RTE_ETHER_ADDR_FMT_SIZE, &agg->actor.system);
>> +			MODE4_DEBUG("preferred partner system %s not equal "
>> +						"self system: %s\n",
>> +				preferred_system_name, self_system_name);
>>   		}
>>   		rte_pktmbuf_free(lacp_pkt);
>>   	} else
>>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] [PATCH v2] fix lacp check system address
  2019-11-26 11:55 ` Vadim
@ 2019-11-26 13:27   ` Ferruh Yigit
  2019-11-26 15:09     ` podovinnikov
  0 siblings, 1 reply; 6+ messages in thread
From: Ferruh Yigit @ 2019-11-26 13:27 UTC (permalink / raw)
  To: Vadim, linville; +Cc: dev, Chas Williams

Hi Vadim,

On 11/26/2019 11:55 AM, Vadim wrote:
> Signed-off-by: Vadim <podovinnikov@protei.ru>

Can you please provide full "Name Surname <email@adress>" signature?


This is bonding patch, please cc bonding maintainers (Chas, instead of John W.
Linville).

> 
> fix lacp check system address

Can you please give more details, what is failing what is the impact etc.

> 
> ---
>  drivers/net/bonding/rte_eth_bond_8023ad.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
> index b77a37ddb..d4dda790a 100644
> --- a/drivers/net/bonding/rte_eth_bond_8023ad.c
> +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
> @@ -792,18 +792,33 @@ rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
>  		struct rte_mbuf *lacp_pkt) {
>  	struct lacpdu_header *lacp;
>  	struct lacpdu_actor_partner_params *partner;
> +	struct port *port, *agg;
>  
>  	if (lacp_pkt != NULL) {
>  		lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
>  		RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
>  
>  		partner = &lacp->lacpdu.partner;
> +		port = &bond_mode_8023ad_ports[slave_id];
> +		agg = &bond_mode_8023ad_ports[port->aggregator_port_id];
> +
>  		if (rte_is_same_ether_addr(&partner->port_params.system,
> -			&internals->mode4.mac_addr)) {
> +							&agg->actor.system)) {
>  			/* This LACP frame is sending to the bonding port
>  			 * so pass it to rx_machine.
>  			 */
>  			rx_machine(internals, slave_id, &lacp->lacpdu);
> +		} else {
> +			char preferred_system_name[RTE_ETHER_ADDR_FMT_SIZE];
> +			char self_system_name[RTE_ETHER_ADDR_FMT_SIZE];
> +			rte_ether_format_addr(preferred_system_name,
> +						RTE_ETHER_ADDR_FMT_SIZE,
> +						&partner->port_params.system);
> +			rte_ether_format_addr(self_system_name,
> +				RTE_ETHER_ADDR_FMT_SIZE, &agg->actor.system);
> +			MODE4_DEBUG("preferred partner system %s not equal "
> +						"self system: %s\n",
> +				preferred_system_name, self_system_name);
>  		}
>  		rte_pktmbuf_free(lacp_pkt);
>  	} else
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-dev] [PATCH v2] fix lacp check system address
       [not found] <20191125180323.E0B174C90@dpdk.org>
@ 2019-11-26 11:55 ` Vadim
  2019-11-26 13:27   ` Ferruh Yigit
  0 siblings, 1 reply; 6+ messages in thread
From: Vadim @ 2019-11-26 11:55 UTC (permalink / raw)
  To: linville; +Cc: dev, Vadim

Signed-off-by: Vadim <podovinnikov@protei.ru>

fix lacp check system address

---
 drivers/net/bonding/rte_eth_bond_8023ad.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index b77a37ddb..d4dda790a 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -792,18 +792,33 @@ rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
 		struct rte_mbuf *lacp_pkt) {
 	struct lacpdu_header *lacp;
 	struct lacpdu_actor_partner_params *partner;
+	struct port *port, *agg;
 
 	if (lacp_pkt != NULL) {
 		lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
 		RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
 
 		partner = &lacp->lacpdu.partner;
+		port = &bond_mode_8023ad_ports[slave_id];
+		agg = &bond_mode_8023ad_ports[port->aggregator_port_id];
+
 		if (rte_is_same_ether_addr(&partner->port_params.system,
-			&internals->mode4.mac_addr)) {
+							&agg->actor.system)) {
 			/* This LACP frame is sending to the bonding port
 			 * so pass it to rx_machine.
 			 */
 			rx_machine(internals, slave_id, &lacp->lacpdu);
+		} else {
+			char preferred_system_name[RTE_ETHER_ADDR_FMT_SIZE];
+			char self_system_name[RTE_ETHER_ADDR_FMT_SIZE];
+			rte_ether_format_addr(preferred_system_name,
+						RTE_ETHER_ADDR_FMT_SIZE,
+						&partner->port_params.system);
+			rte_ether_format_addr(self_system_name,
+				RTE_ETHER_ADDR_FMT_SIZE, &agg->actor.system);
+			MODE4_DEBUG("preferred partner system %s not equal "
+						"self system: %s\n",
+				preferred_system_name, self_system_name);
 		}
 		rte_pktmbuf_free(lacp_pkt);
 	} else
-- 
2.24.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, back to index

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-25 13:13 [dpdk-dev] [PATCH] fix lacp check system address Vadim
2019-11-25 22:25 ` Stephen Hemminger
2019-11-26 11:45   ` [dpdk-dev] [PATCH v2] " Vadim
     [not found] <20191125180323.E0B174C90@dpdk.org>
2019-11-26 11:55 ` Vadim
2019-11-26 13:27   ` Ferruh Yigit
2019-11-26 15:09     ` podovinnikov

DPDK patches and discussions

Archives are clonable:
	git clone --mirror http://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ http://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev


Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/ public-inbox