Allow L3 forwarded jumbo packets on Bonded Interfaces

Set max L3 packet size allowed to the lowest value of the slave links.
Also cleanup FIXME's for VMXNET3 driver.

Change-Id: Ia5cf742f2ab13b8cdc8ea6286f56464ee4f8c51d
Signed-off-by: John Lo <loj@cisco.com>
This commit is contained in:
John Lo
2016-04-19 16:54:20 -04:00
committed by Damjan Marion
parent 6855f6cdfe
commit e5055d21a9

View File

@ -503,15 +503,6 @@ dpdk_lib_init (dpdk_main_t * dm)
}
}
/*
* DAW-FIXME: VMXNET3 driver doesn't support jumbo / multi-buffer pkts
*/
if (xd->pmd == VNET_DPDK_PMD_VMXNET3)
{
xd->port_conf.rxmode.max_rx_pkt_len = 1518;
xd->port_conf.rxmode.jumbo_frame = 0;
}
if (xd->pmd == VNET_DPDK_PMD_AF_PACKET)
{
f64 now = vlib_time_now(vm);
@ -624,11 +615,6 @@ dpdk_lib_init (dpdk_main_t * dm)
vlan_off |= ETH_VLAN_STRIP_OFFLOAD;
rte_eth_dev_set_vlan_offload(xd->device_index, vlan_off);
}
/*
* DAW-FIXME: VMXNET3 driver doesn't support jumbo / multi-buffer pkts
*/
else if (xd->pmd == VNET_DPDK_PMD_VMXNET3)
hi->max_packet_bytes = 1518;
hi->max_l3_packet_bytes[VLIB_RX] = hi->max_l3_packet_bytes[VLIB_TX] =
xd->port_conf.rxmode.max_rx_pkt_len - sizeof(ethernet_header_t);
@ -1409,8 +1395,12 @@ dpdk_process (vlib_main_t * vm,
dpdk_update_link_state (xd, now);
}
{ // Setup MACs for bond interfaces and their links which was initialized in
// dpdk_port_setup() but needs to be done again here to take effect.
{ // Extra set up for bond interfaces:
// 1. Setup MACs for bond interfaces and their slave links which was set
// in dpdk_port_setup() but needs to be done again here to take effect.
// 2. Set max L3 packet size of each bond interface to the lowerst value of
// its slave links
// 3. Set up info for bond interface related CLI support.
int nports = rte_eth_dev_count();
if (nports > 0) {
for (i = 0; i < nports; i++) {
@ -1436,6 +1426,10 @@ dpdk_process (vlib_main_t * vm,
bei = pool_elt_at_index(em->interfaces, bhi->hw_instance);
memcpy(bhi->hw_address, addr, 6);
memcpy(bei->address, addr, 6);
/* Init l3 packet size allowed on bonded interface */
bhi->max_l3_packet_bytes[VLIB_RX] =
bhi->max_l3_packet_bytes[VLIB_TX] =
ETHERNET_MAX_PACKET_BYTES - sizeof(ethernet_header_t);
while (nlink >= 1) { /* for all slave links */
int slave = slink[--nlink];
dpdk_device_t * sdev = &dm->devices[slave];
@ -1452,6 +1446,12 @@ dpdk_process (vlib_main_t * vm,
ssi = vnet_get_sw_interface(vnm, sdev->vlib_sw_if_index);
shi->bond_info = VNET_HW_INTERFACE_BOND_INFO_SLAVE;
ssi->flags |= VNET_SW_INTERFACE_FLAG_BOND_SLAVE;
/* Set l3 packet size allowed as the lowest of slave */
if (bhi->max_l3_packet_bytes[VLIB_RX] >
shi->max_l3_packet_bytes[VLIB_RX])
bhi->max_l3_packet_bytes[VLIB_RX] =
bhi->max_l3_packet_bytes[VLIB_TX] =
shi->max_l3_packet_bytes[VLIB_RX];
}
}
}