From 60191b8919ef630a0fd50c32a734dd04802ccbfc Mon Sep 17 00:00:00 2001 From: David Marchand Date: Fri, 22 Nov 2013 11:24:57 +0100 Subject: [PATCH] pcap: fix build when pcap_sendpacket is unavailable 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 Acked-by: Thomas Monjalon --- 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 e988b4c097..30d444ff25 100644 --- a/lib/librte_pmd_pcap/rte_eth_pcap.c +++ b/lib/librte_pmd_pcap/rte_eth_pcap.c @@ -213,6 +213,7 @@ eth_pcap_tx_dumper(void *queue, return num_tx; } +#ifdef PCAP_CAN_SEND /* * Callback to handle sending packets through a real NIC. */ @@ -243,6 +244,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 1cce7e0751..c45f4a1736 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 +#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[], -- 2.20.1