Before libpcap 1.0.0, pcap_sendpacket was not available on linux targets (unless backported). When using such a library, we won't be able to send packet on the wire, yet we can still dump packets into a pcap file.
Signed-off-by: David Marchand <david.marchand at 6wind.com> --- lib/librte_pmd_pcap/rte_eth_pcap.c | 12 ++++++++++++ lib/librte_pmd_pcap/rte_eth_pcap.h | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c index 50de885..19d19b3 100644 --- a/lib/librte_pmd_pcap/rte_eth_pcap.c +++ b/lib/librte_pmd_pcap/rte_eth_pcap.c @@ -199,6 +199,7 @@ eth_pcap_tx_dumper(void *queue, return num_tx; } +#ifdef PCAP_CAN_SEND /* * Callback to handle sending packets through a real NIC. */ @@ -229,6 +230,17 @@ eth_pcap_tx(void *queue, tx_queue->err_pkts += nb_pkts - num_tx; return num_tx; } +#else +static uint16_t +eth_pcap_tx(__rte_unused void *queue, + __rte_unused struct rte_mbuf **bufs, + __rte_unused uint16_t nb_pkts) +{ + RTE_LOG(ERR, PMD, "pcap library cannot send packets, please rebuild " + "with a more up to date libpcap\n"); + return -1; +} +#endif static int eth_dev_start(struct rte_eth_dev *dev) diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.h b/lib/librte_pmd_pcap/rte_eth_pcap.h index a1bd513..368ed88 100644 --- a/lib/librte_pmd_pcap/rte_eth_pcap.h +++ b/lib/librte_pmd_pcap/rte_eth_pcap.h @@ -39,6 +39,12 @@ extern "C" { #endif #include <pcap.h> +#ifdef pcap_sendpacket +#define PCAP_CAN_SEND +#else +#undef PCAP_CAN_SEND +#endif + #define RTE_ETH_PCAP_PARAM_NAME "eth_pcap" int rte_eth_from_pcaps(pcap_t * const rx_queues[], -- 1.7.10.4