View | Details | Raw Unified | Return to bug 551
Collapse All | Expand All

(-)a/drivers/net/bonding/eth_bond_8023ad_private.h (+1 lines)
Lines 159-164 struct mode8023ad_private { Link Here
159
	uint64_t update_timeout_us;
159
	uint64_t update_timeout_us;
160
	rte_eth_bond_8023ad_ext_slowrx_fn slowrx_cb;
160
	rte_eth_bond_8023ad_ext_slowrx_fn slowrx_cb;
161
	uint8_t external_sm;
161
	uint8_t external_sm;
162
	struct rte_ether_addr mac_addr;
162
163
163
	struct rte_eth_link slave_link;
164
	struct rte_eth_link slave_link;
164
	/***< slave link properties */
165
	/***< slave link properties */
(-)a/drivers/net/bonding/rte_eth_bond_8023ad.c (-12 / +15 lines)
Lines 802-814 Link Here
802
rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
802
rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
803
		struct rte_mbuf *lacp_pkt) {
803
		struct rte_mbuf *lacp_pkt) {
804
	struct lacpdu_header *lacp;
804
	struct lacpdu_header *lacp;
805
	struct lacpdu_actor_partner_params *partner;
805
806
806
	if (lacp_pkt != NULL) {
807
	if (lacp_pkt != NULL) {
807
		lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
808
		lacp = rte_pktmbuf_mtod(lacp_pkt, struct lacpdu_header *);
808
		RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
809
		RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
809
810
810
		/* This is LACP frame so pass it to rx_machine */
811
		partner = &lacp->lacpdu.partner;
811
		rx_machine(internals, slave_id, &lacp->lacpdu);
812
		if (rte_is_same_ether_addr(&partner->port_params.system,
813
			&internals->mode4.mac_addr)) {
814
			/* This LACP frame is sending to the bonding port
815
			 * so pass it to rx_machine.
816
			 */
817
			rx_machine(internals, slave_id, &lacp->lacpdu);
818
		}
812
		rte_pktmbuf_free(lacp_pkt);
819
		rte_pktmbuf_free(lacp_pkt);
813
	} else
820
	} else
814
		rx_machine(internals, slave_id, NULL);
821
		rx_machine(internals, slave_id, NULL);
Lines 821-827 Link Here
821
	struct bond_dev_private *internals = bond_dev->data->dev_private;
828
	struct bond_dev_private *internals = bond_dev->data->dev_private;
822
	struct port *port;
829
	struct port *port;
823
	struct rte_eth_link link_info;
830
	struct rte_eth_link link_info;
824
	struct rte_ether_addr slave_addr;
825
	struct rte_mbuf *lacp_pkt = NULL;
831
	struct rte_mbuf *lacp_pkt = NULL;
826
	uint16_t slave_id;
832
	uint16_t slave_id;
827
	uint16_t i;
833
	uint16_t i;
Lines 847-854 Link Here
847
		} else {
853
		} else {
848
			key = 0;
854
			key = 0;
849
		}
855
		}
850
851
		rte_eth_macaddr_get(slave_id, &slave_addr);
852
		port = &bond_mode_8023ad_ports[slave_id];
856
		port = &bond_mode_8023ad_ports[slave_id];
853
857
854
		key = rte_cpu_to_be_16(key);
858
		key = rte_cpu_to_be_16(key);
Lines 860-867 Link Here
860
			SM_FLAG_SET(port, NTT);
864
			SM_FLAG_SET(port, NTT);
861
		}
865
		}
862
866
863
		if (!rte_is_same_ether_addr(&port->actor.system, &slave_addr)) {
867
		if (!rte_is_same_ether_addr(&internals->mode4.mac_addr, &port->actor.system)) {
864
			rte_ether_addr_copy(&slave_addr, &port->actor.system);
868
			rte_ether_addr_copy(&internals->mode4.mac_addr, &port->actor.system);
865
			if (port->aggregator_port_id == slave_id)
869
			if (port->aggregator_port_id == slave_id)
866
				SM_FLAG_SET(port, NTT);
870
				SM_FLAG_SET(port, NTT);
867
		}
871
		}
Lines 1139-1159 Link Here
1139
bond_mode_8023ad_mac_address_update(struct rte_eth_dev *bond_dev)
1143
bond_mode_8023ad_mac_address_update(struct rte_eth_dev *bond_dev)
1140
{
1144
{
1141
	struct bond_dev_private *internals = bond_dev->data->dev_private;
1145
	struct bond_dev_private *internals = bond_dev->data->dev_private;
1142
	struct rte_ether_addr slave_addr;
1143
	struct port *slave, *agg_slave;
1146
	struct port *slave, *agg_slave;
1144
	uint16_t slave_id, i, j;
1147
	uint16_t slave_id, i, j;
1145
1148
1146
	bond_mode_8023ad_stop(bond_dev);
1149
	bond_mode_8023ad_stop(bond_dev);
1150
	rte_eth_macaddr_get(internals->port_id, &internals->mode4.mac_addr);
1147
1151
1148
	for (i = 0; i < internals->active_slave_count; i++) {
1152
	for (i = 0; i < internals->active_slave_count; i++) {
1149
		slave_id = internals->active_slaves[i];
1153
		slave_id = internals->active_slaves[i];
1150
		slave = &bond_mode_8023ad_ports[slave_id];
1154
		slave = &bond_mode_8023ad_ports[slave_id];
1151
		rte_eth_macaddr_get(slave_id, &slave_addr);
1155
		if (rte_is_same_ether_addr(&internals->mode4.mac_addr, &slave->actor.system))
1152
1153
		if (rte_is_same_ether_addr(&slave_addr, &slave->actor.system))
1154
			continue;
1156
			continue;
1155
1157
1156
		rte_ether_addr_copy(&slave_addr, &slave->actor.system);
1158
		rte_ether_addr_copy(&internals->mode4.mac_addr, &slave->actor.system);
1159
1157
		/* Do nothing if this port is not an aggregator. In other case
1160
		/* Do nothing if this port is not an aggregator. In other case
1158
		 * Set NTT flag on every port that use this aggregator. */
1161
		 * Set NTT flag on every port that use this aggregator. */
1159
		if (slave->aggregator_port_id != slave_id)
1162
		if (slave->aggregator_port_id != slave_id)

Return to bug 551