This will make bypassing the qdisc configurable, as it might be handy
for getting fast data rates but is generally needed.
Signed-off-by: Sander Vrijders <sander.vrijders@xxxxxxxx>
---
src/ipcpd/config.h.in | 1 +
src/ipcpd/eth/CMakeLists.txt | 2 ++
src/ipcpd/eth/eth.c | 4 ++++
3 files changed, 7 insertions(+)
diff --git a/src/ipcpd/config.h.in b/src/ipcpd/config.h.in
index 567fe97..04565fa 100644
--- a/src/ipcpd/config.h.in
+++ b/src/ipcpd/config.h.in
@@ -63,3 +63,4 @@
#cmakedefine HAVE_RAW_SOCKETS
#define IPCP_ETH_RD_THR @IPCP_ETH_RD_THR@
#define IPCP_ETH_WR_THR @IPCP_ETH_WR_THR@
+#cmakedefine IPCP_ETH_QDISC_BYPASS
diff --git a/src/ipcpd/eth/CMakeLists.txt b/src/ipcpd/eth/CMakeLists.txt
index 6672f93..e4acdb7 100644
--- a/src/ipcpd/eth/CMakeLists.txt
+++ b/src/ipcpd/eth/CMakeLists.txt
@@ -82,6 +82,8 @@ if (HAVE_ETH)
"Number of reader threads in Ethernet IPCP")
set(IPCP_ETH_WR_THR 3 CACHE STRING
"Number of writer threads in Ethernet IPCP")
+ set(IPCP_ETH_QDISC_BYPASS false CACHE BOOL
+ "Bypass the Qdisc in the kernel when using raw sockets")
set(ETH_LLC_SOURCES
# Add source files here
diff --git a/src/ipcpd/eth/eth.c b/src/ipcpd/eth/eth.c
index e7a1580..3a749cf 100644
--- a/src/ipcpd/eth/eth.c
+++ b/src/ipcpd/eth/eth.c
@@ -1231,7 +1231,9 @@ static int eth_ipcp_bootstrap(const struct ipcp_config *
conf)
size_t maxsz;
#endif
#if defined(HAVE_RAW_SOCKETS)
+ #if defined(IPCP_ETH_QDISC_BYPASS)
int qdisc_bypass = 1;
+ #endif /* ENABLE_QDISC_BYPASS */
int flags;
#endif
assert(conf);
@@ -1415,10 +1417,12 @@ static int eth_ipcp_bootstrap(const struct ipcp_config
* conf)
goto fail_device;
}
+ #if defined(IPCP_ETH_QDISC_BYPASS)
if (setsockopt(eth_data.s_fd, SOL_PACKET, PACKET_QDISC_BYPASS,
&qdisc_bypass, sizeof(qdisc_bypass))) {
log_info("Qdisc bypass not supported.");
}
+ #endif
if (bind(eth_data.s_fd, (struct sockaddr *) ð_data.device,
sizeof(eth_data.device))) {
--
2.19.1