* [PATCH 0/3] pcap build fixes
@ 2013-11-22 10:24 David Marchand
[not found] ` <cover.1385115073.git.david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 5+ messages in thread
From: David Marchand @ 2013-11-22 10:24 UTC (permalink / raw)
To: dev-VfR2kkLFssw
Fix build with old pcap library.
Make it possible to specify which pcap library to use.
David Marchand (3):
pcap: use pcap-config to guess compilation flags
pcap: fix build with old libpcap
pcap: fix build when pcap_sendpacket is unavailable
app/test-pmd/Makefile | 4 ----
doc/build-sdk-quick.txt | 2 ++
lib/librte_pmd_pcap/rte_eth_pcap.c | 12 ++++++++++++
lib/librte_pmd_pcap/rte_eth_pcap.h | 8 +++++++-
mk/rte.app.mk | 5 ++++-
mk/rte.sdkbuild.mk | 8 ++++++++
mk/target/generic/rte.vars.mk | 2 +-
7 files changed, 34 insertions(+), 7 deletions(-)
--
1.7.10.4
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] pcap: use pcap-config to guess compilation flags
[not found] ` <cover.1385115073.git.david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
@ 2013-11-22 10:24 ` David Marchand
2013-11-22 10:24 ` [PATCH 2/3] pcap: fix build with old libpcap David Marchand
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: David Marchand @ 2013-11-22 10:24 UTC (permalink / raw)
To: dev-VfR2kkLFssw
Use pcap-config to populate CFLAGS and LDFLAGS.
LIBPCAP_CFLAGS and LIBPCAP_LDFLAGS can be used to override this (useful when
cross-compiling).
Signed-off-by: David Marchand <david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
---
app/test-pmd/Makefile | 4 ----
doc/build-sdk-quick.txt | 2 ++
mk/rte.app.mk | 5 ++++-
mk/rte.sdkbuild.mk | 8 ++++++++
mk/target/generic/rte.vars.mk | 2 +-
5 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/app/test-pmd/Makefile b/app/test-pmd/Makefile
index cd04ea5..2ced595 100644
--- a/app/test-pmd/Makefile
+++ b/app/test-pmd/Makefile
@@ -39,10 +39,6 @@ APP = testpmd
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
-ifeq ($(CONFIG_RTE_LIBRTE_PMD_PCAP),y)
-LDFLAGS += -lpcap
-endif
-
#
# all source are stored in SRCS-y
#
diff --git a/doc/build-sdk-quick.txt b/doc/build-sdk-quick.txt
index 18b0ee6..ca39c33 100644
--- a/doc/build-sdk-quick.txt
+++ b/doc/build-sdk-quick.txt
@@ -11,6 +11,8 @@ Build variables
EXTRA_CPPFLAGS preprocessor options
EXTRA_CFLAGS compiler options
EXTRA_LDFLAGS linker options
+ LIBPCAP_CFLAGS libpcap compiler options
+ LIBPCAP_LDFLAGS libpcap linker options
CROSS toolchain prefix
V verbose
D debug dependencies
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index d2ce5c0..9420f24 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -150,7 +150,10 @@ LDLIBS += -lrte_eal
endif
ifeq ($(CONFIG_RTE_LIBRTE_PMD_PCAP),y)
-LDLIBS += -lrte_pmd_pcap -lpcap
+LDLIBS += -lrte_pmd_pcap
+LIBPCAP_LDFLAGS ?= $(shell pcap-config --libs)
+$(if $(LIBPCAP_LDFLAGS),,$(error LIBPCAP_LDFLAGS is undefined))
+LDLIBS += $(LIBPCAP_LDFLAGS)
endif
LDLIBS += $(EXECENV_LDLIBS)
diff --git a/mk/rte.sdkbuild.mk b/mk/rte.sdkbuild.mk
index 0dc23ff..33bed57 100644
--- a/mk/rte.sdkbuild.mk
+++ b/mk/rte.sdkbuild.mk
@@ -40,6 +40,14 @@ else
include $(RTE_SDK)/mk/rte.vars.mk
endif
+ifeq ($(CONFIG_RTE_LIBRTE_PMD_PCAP),y)
+LIBPCAP_CFLAGS ?= $(shell pcap-config --cflags)
+$(if $(LIBPCAP_CFLAGS),,$(error LIBPCAP_CFLAGS is undefined))
+EXTERNAL_LIB_CFLAGS += $(LIBPCAP_CFLAGS)
+endif
+
+export EXTERNAL_LIB_CFLAGS
+
#
# include .depdirs and define rules to order priorities between build
# of directories.
diff --git a/mk/target/generic/rte.vars.mk b/mk/target/generic/rte.vars.mk
index 9030f44..22893fc 100644
--- a/mk/target/generic/rte.vars.mk
+++ b/mk/target/generic/rte.vars.mk
@@ -104,7 +104,7 @@ ifeq ($(KERNELRELEASE),)
# merge all CFLAGS
CFLAGS := $(CPU_CFLAGS) $(EXECENV_CFLAGS) $(TOOLCHAIN_CFLAGS) $(MACHINE_CFLAGS)
-CFLAGS += $(TARGET_CFLAGS)
+CFLAGS += $(TARGET_CFLAGS) $(EXTERNAL_LIB_CFLAGS)
# merge all LDFLAGS
LDFLAGS := $(CPU_LDFLAGS) $(EXECENV_LDFLAGS) $(TOOLCHAIN_LDFLAGS) $(MACHINE_LDFLAGS)
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] pcap: fix build with old libpcap
[not found] ` <cover.1385115073.git.david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2013-11-22 10:24 ` [PATCH 1/3] pcap: use pcap-config to guess compilation flags David Marchand
@ 2013-11-22 10:24 ` David Marchand
2013-11-22 10:24 ` [PATCH 3/3] pcap: fix build when pcap_sendpacket is unavailable David Marchand
2013-11-22 12:38 ` [PATCH 0/3] pcap build fixes Thomas Monjalon
3 siblings, 0 replies; 5+ messages in thread
From: David Marchand @ 2013-11-22 10:24 UTC (permalink / raw)
To: dev-VfR2kkLFssw
For backwards compatibility, pcap.h includes pcap/pcap.h.
Hence, to be compatible with older pcap libraries, we must include pcap.h.
Signed-off-by: David Marchand <david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
---
lib/librte_pmd_pcap/rte_eth_pcap.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.h b/lib/librte_pmd_pcap/rte_eth_pcap.h
index 7ed68b1..a1bd513 100644
--- a/lib/librte_pmd_pcap/rte_eth_pcap.h
+++ b/lib/librte_pmd_pcap/rte_eth_pcap.h
@@ -37,7 +37,7 @@
#ifdef __cplusplus
extern "C" {
#endif
-#include <pcap/pcap.h>
+#include <pcap.h>
#define RTE_ETH_PCAP_PARAM_NAME "eth_pcap"
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] pcap: fix build when pcap_sendpacket is unavailable
[not found] ` <cover.1385115073.git.david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2013-11-22 10:24 ` [PATCH 1/3] pcap: use pcap-config to guess compilation flags David Marchand
2013-11-22 10:24 ` [PATCH 2/3] pcap: fix build with old libpcap David Marchand
@ 2013-11-22 10:24 ` David Marchand
2013-11-22 12:38 ` [PATCH 0/3] pcap build fixes Thomas Monjalon
3 siblings, 0 replies; 5+ messages in thread
From: David Marchand @ 2013-11-22 10:24 UTC (permalink / raw)
To: dev-VfR2kkLFssw
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-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
---
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/3] pcap build fixes
[not found] ` <cover.1385115073.git.david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
` (2 preceding siblings ...)
2013-11-22 10:24 ` [PATCH 3/3] pcap: fix build when pcap_sendpacket is unavailable David Marchand
@ 2013-11-22 12:38 ` Thomas Monjalon
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Monjalon @ 2013-11-22 12:38 UTC (permalink / raw)
To: David Marchand; +Cc: dev-VfR2kkLFssw
22/11/2013 11:24, David Marchand :
> Fix build with old pcap library.
> Make it possible to specify which pcap library to use.
>
> David Marchand (3):
> pcap: use pcap-config to guess compilation flags
> pcap: fix build with old libpcap
> pcap: fix build when pcap_sendpacket is unavailable
Acked and applied.
Thanks
--
Thomas
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-11-22 12:38 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-22 10:24 [PATCH 0/3] pcap build fixes David Marchand
[not found] ` <cover.1385115073.git.david.marchand-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2013-11-22 10:24 ` [PATCH 1/3] pcap: use pcap-config to guess compilation flags David Marchand
2013-11-22 10:24 ` [PATCH 2/3] pcap: fix build with old libpcap David Marchand
2013-11-22 10:24 ` [PATCH 3/3] pcap: fix build when pcap_sendpacket is unavailable David Marchand
2013-11-22 12:38 ` [PATCH 0/3] pcap build fixes Thomas Monjalon
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.