#include <dpdk/device/dpdk_priv.h>
+#define ETHER_MAX_LEN 1518 /**< Maximum frame len, including CRC. */
+
dpdk_main_t dpdk_main;
dpdk_config_main_t dpdk_config_main;
uword *p_hqos;
u32 next_hqos_cpu = 0;
- u8 af_packet_port_id = 0;
- u8 bond_ether_port_id = 0;
+ u8 af_packet_instance_num = 0;
+ u8 bond_ether_instance_num = 0;
last_pci_addr.as_u32 = ~0;
dm->hqos_cpu_first_index = 0;
| VNET_BUFFER_F_L4_CHECKSUM_COMPUTED);
/* vlib_buffer_t template */
- vec_validate_aligned (dm->buffer_templates, tm->n_vlib_mains - 1,
+ vec_validate_aligned (dm->per_thread_data, tm->n_vlib_mains - 1,
CLIB_CACHE_LINE_BYTES);
for (i = 0; i < tm->n_vlib_mains; i++)
{
vlib_buffer_free_list_t *fl;
- vlib_buffer_t *bt = vec_elt_at_index (dm->buffer_templates, i);
+ dpdk_per_thread_data_t *ptd = vec_elt_at_index (dm->per_thread_data, i);
fl = vlib_buffer_get_free_list (vm,
VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
- vlib_buffer_init_for_free_list (bt, fl);
- bt->flags = dm->buffer_flags_template;
- vnet_buffer (bt)->sw_if_index[VLIB_TX] = (u32) ~ 0;
+ vlib_buffer_init_for_free_list (&ptd->buffer_template, fl);
+ ptd->buffer_template.flags = dm->buffer_flags_template;
+ vnet_buffer (&ptd->buffer_template)->sw_if_index[VLIB_TX] = (u32) ~ 0;
}
for (i = 0; i < nports; i++)
{
u8 addr[6];
u8 vlan_strip = 0;
- int j;
struct rte_eth_dev_info dev_info;
struct rte_eth_link l;
dpdk_device_config_t *devconf = 0;
vlib_pci_addr_t pci_addr;
uword *p = 0;
+ rte_eth_link_get_nowait (i, &l);
rte_eth_dev_info_get (i, &dev_info);
if (dev_info.pci_dev) /* bonded interface has no pci info */
{
case VNET_DPDK_PMD_IXGBE:
case VNET_DPDK_PMD_I40E:
xd->port_type = port_type_from_speed_capa (&dev_info);
+ xd->supported_flow_actions = VNET_FLOW_ACTION_MARK |
+ VNET_FLOW_ACTION_REDIRECT_TO_NODE |
+ VNET_FLOW_ACTION_BUFFER_ADVANCE |
+ VNET_FLOW_ACTION_COUNT | VNET_FLOW_ACTION_DROP;
+
if (dm->conf->no_tx_checksum_offload == 0)
{
xd->tx_conf.txq_flags &= ~ETH_TXQ_FLAGS_NOXSUMS;
/* Cisco VIC */
case VNET_DPDK_PMD_ENIC:
- rte_eth_link_get_nowait (i, &l);
if (l.link_speed == 40000)
xd->port_type = VNET_DPDK_PORT_TYPE_ETH_40G;
else
case VNET_DPDK_PMD_AF_PACKET:
xd->port_type = VNET_DPDK_PORT_TYPE_AF_PACKET;
- xd->port_id = af_packet_port_id++;
+ xd->af_packet_instance_num = af_packet_instance_num++;
break;
case VNET_DPDK_PMD_BOND:
xd->port_type = VNET_DPDK_PORT_TYPE_ETH_BOND;
- xd->port_id = bond_ether_port_id++;
+ xd->bond_instance_num = bond_ether_instance_num++;
break;
case VNET_DPDK_PMD_VIRTIO_USER:
xd->port_type = VNET_DPDK_PORT_TYPE_VHOST_ETHER;
break;
+ case VNET_DPDK_PMD_LIOVF_ETHER:
+ xd->port_type = VNET_DPDK_PORT_TYPE_ETH_VF;
+ break;
+
default:
xd->port_type = VNET_DPDK_PORT_TYPE_UNKNOWN;
}
dq->queue_id = 0;
}
- vec_validate_aligned (xd->tx_vectors, tm->n_vlib_mains,
- CLIB_CACHE_LINE_BYTES);
- for (j = 0; j < tm->n_vlib_mains; j++)
- {
- vec_validate_ha (xd->tx_vectors[j], xd->nb_tx_desc,
- sizeof (tx_ring_hdr_t), CLIB_CACHE_LINE_BYTES);
- vec_reset_length (xd->tx_vectors[j]);
- }
-
- vec_validate_aligned (xd->rx_vectors, xd->rx_q_used,
- CLIB_CACHE_LINE_BYTES);
- for (j = 0; j < xd->rx_q_used; j++)
- {
- vec_validate_aligned (xd->rx_vectors[j], VLIB_FRAME_SIZE - 1,
- CLIB_CACHE_LINE_BYTES);
- vec_reset_length (xd->rx_vectors[j]);
- }
-
/* count the number of descriptors used for this device */
nb_desc += xd->nb_rx_desc + xd->nb_tx_desc * xd->tx_q_used;
xd->port_conf.rxmode.max_rx_pkt_len = max_rx_frame;
sw = vnet_get_hw_sw_interface (dm->vnet_main, xd->hw_if_index);
- xd->vlib_sw_if_index = sw->sw_if_index;
+ xd->sw_if_index = sw->sw_if_index;
vnet_hw_interface_set_input_node (dm->vnet_main, xd->hw_if_index,
dpdk_input_node.index);
* ethernet_register_interface() above*/
if (hi)
{
- hi->max_packet_bytes = max_rx_frame;
+ hi->max_packet_bytes = mtu;
hi->max_supported_packet_bytes = max_rx_frame;
}
else
clib_warning ("hi NULL");
+ if (dm->conf->no_multi_seg)
+ mtu = mtu > ETHER_MAX_LEN ? ETHER_MAX_LEN : mtu;
+
rte_eth_dev_set_mtu (xd->device_index, mtu);
}
/* Amazen Elastic Network Adapter */
else if (d->vendor_id == 0x1d0f && d->device_id >= 0xec20 && d->device_id <= 0xec21)
;
+ /* Cavium Network Adapter */
+ else if (d->vendor_id == 0x177d && d->device_id == 0x9712)
+ ;
/* Mellanox */
else if (d->vendor_id == 0x15b3 && d->device_id >= 0x1013 && d->device_id <= 0x101a)
{
u8 new_link_state;
} *ed;
ed = ELOG_DATA (&vm->elog_main, e);
- ed->sw_if_index = xd->vlib_sw_if_index;
+ ed->sw_if_index = xd->sw_if_index;
ed->admin_up = (xd->flags & DPDK_DEVICE_FLAG_ADMIN_UP) != 0;
ed->old_link_state = (u8)
vnet_hw_interface_is_link_up (vnm, xd->hw_if_index);
u32 flags;
} *ed;
ed = ELOG_DATA (&vm->elog_main, e);
- ed->sw_if_index = xd->vlib_sw_if_index;
+ ed->sw_if_index = xd->sw_if_index;
ed->flags = hw_flags;
}
vnet_hw_interface_set_flags (vnm, xd->hw_if_index, hw_flags);
/* Set MAC of bounded interface to that of 1st slave link */
dpdk_log_info ("Set MAC for bond port %d BondEthernet%d",
- i, xd->port_id);
+ i, xd->bond_instance_num);
rv = rte_eth_bond_mac_address_set
(i, (struct ether_addr *) addr);
if (rv)
(bhi->bond_info, sdev->hw_if_index, 1);
/* Set MACs and slave link flags on slave interface */
shi = vnet_get_hw_interface (vnm, sdev->hw_if_index);
- ssi = vnet_get_sw_interface
- (vnm, sdev->vlib_sw_if_index);
+ ssi = vnet_get_sw_interface (vnm, sdev->sw_if_index);
sei = pool_elt_at_index
(em->interfaces, shi->hw_instance);
shi->bond_info = VNET_HW_INTERFACE_BOND_INFO_SLAVE;