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