dpdk_main_t *dm = &dpdk_main;
vnet_hw_interface_t *hw;
struct rte_eth_dev_info dev_info;
+ struct rte_pci_device *pci_dev;
uword *p = 0;
clib_error_t *error = NULL;
hw = vnet_get_hw_interface (dm->vnet_main, hw_if_index);
*xd = vec_elt_at_index (dm->devices, hw->dev_instance);
- rte_eth_dev_info_get ((*xd)->device_index, &dev_info);
- if (dev_info.pci_dev)
- { /* bonded interface has no pci info */
+ rte_eth_dev_info_get ((*xd)->port_id, &dev_info);
+
+ pci_dev = dpdk_get_pci_device (&dev_info);
+
+ if (pci_dev)
+ {
vlib_pci_addr_t pci_addr;
- pci_addr.domain = dev_info.pci_dev->addr.domain;
- pci_addr.bus = dev_info.pci_dev->addr.bus;
- pci_addr.slot = dev_info.pci_dev->addr.devid;
- pci_addr.function = dev_info.pci_dev->addr.function;
+ pci_addr.domain = pci_dev->addr.domain;
+ pci_addr.bus = pci_dev->addr.bus;
+ pci_addr.slot = pci_dev->addr.devid;
+ pci_addr.function = pci_dev->addr.function;
p =
hash_get (dm->conf->device_config_index_by_pci_addr, pci_addr.as_u32);
clib_error_report (error);
else
vlib_cli_output (vm, "saved to %s...",
- dm->pcap[rx_tx].pcap_filename);
+ dm->pcap[rx_tx].pcap_main.file_name);
}
dm->pcap[rx_tx].pcap_enable = 0;
{
vlib_cli_output
(vm, "max is %d for any interface to file %s",
- dm->pcap_pkts_to_capture ?
- dm->pcap[rx_tx].pcap_pkts_to_capture
+ dm->pcap[rx_tx].pcap_main.n_packets_to_capture ?
+ dm->pcap[rx_tx].pcap_main.n_packets_to_capture
: PCAP_DEF_PKT_TO_CAPTURE,
- dm->pcap_filename ?
- dm->pcap[rx_tx].pcap_filename : (u8 *) "/tmp/vpe.pcap");
+ dm->pcap[rx_tx].pcap_main.file_name ?
+ (u8 *) dm->pcap[rx_tx].pcap_main.file_name :
+ (u8 *) "/tmp/vpe.pcap");
}
else
{
vlib_cli_output (vm, "max is %d for interface %U to file %s",
- dm->pcap[rx_tx].pcap_pkts_to_capture
- ? dm->pcap_pkts_to_capture
- : PCAP_DEF_PKT_TO_CAPTURE,
+ dm->pcap[rx_tx].pcap_main.n_packets_to_capture
+ ? dm->pcap[rx_tx].
+ pcap_main.n_packets_to_capture :
+ PCAP_DEF_PKT_TO_CAPTURE,
format_vnet_sw_if_index_name, dm->vnet_main,
dm->pcap_sw_if_index,
- dm->pcap[rx_tx].pcap_filename
- ? dm->pcap[rx_tx].pcap_filename : (u8 *)
- "/tmp/vpe.pcap");
+ dm->pcap[rx_tx].
+ pcap_main.file_name ? (u8 *) dm->pcap[rx_tx].
+ pcap_main.file_name : (u8 *) "/tmp/vpe.pcap");
}
if (dm->pcap[rx_tx].pcap_enable == 0)
/* Since no error, save configured values. */
if (chroot_filename)
{
- if (dm->pcap[rx_tx].pcap_filename)
- vec_free (dm->pcap[rx_tx].pcap_filename);
+ if (dm->pcap[rx_tx].pcap_main.file_name)
+ vec_free (dm->pcap[rx_tx].pcap_main.file_name);
vec_add1 (chroot_filename, 0);
- dm->pcap[rx_tx].pcap_filename = chroot_filename;
+ dm->pcap[rx_tx].pcap_main.file_name = (char *) chroot_filename;
}
if (max)
- dm->pcap[rx_tx].pcap_pkts_to_capture = max;
-
+ dm->pcap[rx_tx].pcap_main.n_packets_to_capture = max;
if (enabled)
{
- if (dm->pcap[rx_tx].pcap_filename == 0)
- dm->pcap[rx_tx].pcap_filename = format (0, "/tmp/vpe.pcap%c", 0);
-
- memset (&dm->pcap[rx_tx].pcap_main, 0,
- sizeof (dm->pcap[rx_tx].pcap_main));
- dm->pcap[rx_tx].pcap_main.file_name =
- (char *) dm->pcap[rx_tx].pcap_filename;
- dm->pcap[rx_tx].pcap_main.n_packets_to_capture
- = PCAP_DEF_PKT_TO_CAPTURE;
- if (dm->pcap[rx_tx].pcap_pkts_to_capture)
- dm->pcap[rx_tx].pcap_main.n_packets_to_capture
- = dm->pcap[rx_tx].pcap_pkts_to_capture;
+ if (dm->pcap[rx_tx].pcap_main.file_name == 0)
+ dm->pcap[rx_tx].pcap_main.file_name
+ = (char *) format (0, "/tmp/vpe.pcap%c", 0);
+ dm->pcap[rx_tx].pcap_main.n_packets_captured = 0;
dm->pcap[rx_tx].pcap_main.packet_type = PCAP_PACKET_TYPE_ethernet;
+ if (dm->pcap[rx_tx].pcap_main.lock == 0)
+ clib_spinlock_init (&(dm->pcap[rx_tx].pcap_main.lock));
dm->pcap[rx_tx].pcap_enable = 1;
- vlib_cli_output (vm, "pcap tx capture on...");
+ vlib_cli_output (vm, "pcap %s capture on...",
+ rx_tx == VLIB_RX ? "rx" : "tx");
}
}
else if (chroot_filename)
* associated with a packet capture. If packet capture is in progress,
* '<em>status</em>' also will return the number of packets currently in
* the local buffer. All additional attributes entered on command line
- * with '<em>status</em>' will be ingnored and not applied.
+ * with '<em>status</em>' will be ignored and not applied.
*
* @cliexpar
* Example of how to display the status of a tx packet capture when off:
* @cliexpar
* @parblock
*
- * Example of how to display how many DPDK buffer test command has allcoated:
+ * Example of how to display how many DPDK buffer test command has allocated:
* @cliexstart{test dpdk buffer}
* Currently 0 buffers allocated
* @cliexend
cpu < (dm->hqos_cpu_first_index + dm->hqos_cpu_count))
vlib_cli_output (vm, "Thread %u (%s at lcore %u):", cpu,
vlib_worker_threads[cpu].name,
- vlib_worker_threads[cpu].lcore_id);
+ vlib_worker_threads[cpu].cpu_id);
vec_foreach (dq, dm->devices_by_hqos_cpu[cpu])
{
/* Device specific data */
struct rte_eth_dev_info dev_info;
+ struct rte_pci_device *pci_dev;
dpdk_device_config_t *devconf = 0;
vnet_hw_interface_t *hw;
dpdk_device_t *xd;
hw = vnet_get_hw_interface (dm->vnet_main, hw_if_index);
xd = vec_elt_at_index (dm->devices, hw->dev_instance);
- rte_eth_dev_info_get (xd->device_index, &dev_info);
- if (dev_info.pci_dev)
+ rte_eth_dev_info_get (xd->port_id, &dev_info);
+
+ pci_dev = dpdk_get_pci_device (&dev_info);
+
+ if (pci_dev)
{ /* bonded interface has no pci info */
vlib_pci_addr_t pci_addr;
- pci_addr.domain = dev_info.pci_dev->addr.domain;
- pci_addr.bus = dev_info.pci_dev->addr.bus;
- pci_addr.slot = dev_info.pci_dev->addr.devid;
- pci_addr.function = dev_info.pci_dev->addr.function;
+ pci_addr.domain = pci_dev->addr.domain;
+ pci_addr.bus = pci_dev->addr.bus;
+ pci_addr.slot = pci_dev->addr.devid;
+ pci_addr.function = pci_dev->addr.function;
p =
hash_get (dm->conf->device_config_index_by_pci_addr, pci_addr.as_u32);
}
/*?
- * This command is used to set the packet fields required for classifiying the
+ * This command is used to set the packet fields required for classifying the
* incoming packet. As a result of classification process, packet field
* information will be mapped to 5 tuples (subport, pipe, traffic class, pipe,
* color) and stored in packet mbuf.
u32 hw_if_index = (u32) ~ 0;
u32 profile_id, subport_id, i;
struct rte_eth_dev_info dev_info;
+ struct rte_pci_device *pci_dev;
dpdk_device_config_t *devconf = 0;
vlib_thread_registration_t *tr;
uword *p = 0;
hw = vnet_get_hw_interface (dm->vnet_main, hw_if_index);
xd = vec_elt_at_index (dm->devices, hw->dev_instance);
- rte_eth_dev_info_get (xd->device_index, &dev_info);
- if (dev_info.pci_dev)
+ rte_eth_dev_info_get (xd->port_id, &dev_info);
+
+ pci_dev = dpdk_get_pci_device (&dev_info);
+
+ if (pci_dev)
{ /* bonded interface has no pci info */
vlib_pci_addr_t pci_addr;
- pci_addr.domain = dev_info.pci_dev->addr.domain;
- pci_addr.bus = dev_info.pci_dev->addr.bus;
- pci_addr.slot = dev_info.pci_dev->addr.devid;
- pci_addr.function = dev_info.pci_dev->addr.function;
+ pci_addr.domain = pci_dev->addr.domain;
+ pci_addr.bus = pci_dev->addr.bus;
+ pci_addr.slot = pci_dev->addr.devid;
+ pci_addr.function = pci_dev->addr.function;
p =
hash_get (dm->conf->device_config_index_by_pci_addr, pci_addr.as_u32);
hw = vnet_get_hw_interface (dm->vnet_main, hw_if_index);
xd = vec_elt_at_index (dm->devices, hw->dev_instance);
- rte_eth_dev_info_get (xd->device_index, &dev_info);
+ rte_eth_dev_info_get (xd->port_id, &dev_info);
if (dev_info.pci_dev)
{ /* bonded interface has no pci info */
vlib_pci_addr_t pci_addr;
* the list of arguments passed to DPDK when started.
*
* @cliexpar
- * Example of how to display how many DPDK buffer test command has allcoated:
+ * Example of how to display how many DPDK buffer test command has allocated:
* @cliexstart{show dpdk version}
* DPDK Version: DPDK 16.11.0
* DPDK EAL init args: -c 1 -n 4 --huge-dir /run/vpp/hugepages --file-prefix vpp -w 0000:00:08.0 -w 0000:00:09.0 --master-lcore 0 --socket-mem 256