summaryrefslogtreecommitdiff
path: root/corking.c
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2013-06-04 00:24:37 +0200
committerDaniel Borkmann <dborkman@redhat.com>2013-06-04 00:24:37 +0200
commit1c0df00bdead4a02df12d610401dd34f7ea59a01 (patch)
tree4a1f69a3c551bd6a117923961e4d354ed48e5643 /corking.c
parent380b3ae23e93cf21cdb194a8e599f64ff40988a7 (diff)
corking: break out udp/tcp cork functions
No, it's not about whine bottles ... move udp and tcp cork functions out of xutils.c, so that we can further let it shrink. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Diffstat (limited to 'corking.c')
-rw-r--r--corking.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/corking.c b/corking.c
new file mode 100644
index 0000000..a6e0f84
--- /dev/null
+++ b/corking.c
@@ -0,0 +1,66 @@
+/*
+ * netsniff-ng - the packet sniffing beast
+ * Copyright 2009, 2010 Daniel Borkmann.
+ * Subject to the GPL, version 2.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <linux/udp.h>
+#include <linux/tcp.h>
+#include <linux/in.h>
+
+#include "corking.h"
+#include "die.h"
+
+void set_udp_cork(int fd)
+{
+ int ret, state = 1;
+
+ ret = setsockopt(fd, IPPROTO_UDP, UDP_CORK, &state, sizeof(state));
+ if (unlikely(ret))
+ panic("Cannot cork UDP socket!\n");
+}
+
+void set_udp_uncork(int fd)
+{
+ int ret, state = 0;
+
+ ret = setsockopt(fd, IPPROTO_UDP, UDP_CORK, &state, sizeof(state));
+ if (unlikely(ret))
+ panic("Cannot uncork UDP socket!\n");
+}
+
+void set_tcp_cork(int fd)
+{
+ int ret, state = 1;
+
+ ret = setsockopt(fd, IPPROTO_TCP, TCP_CORK, &state, sizeof(state));
+ if (unlikely(ret))
+ panic("Cannot cork TCP socket!\n");
+}
+
+void set_tcp_uncork(int fd)
+{
+ int ret, state = 0;
+
+ ret = setsockopt(fd, IPPROTO_TCP, TCP_CORK, &state, sizeof(state));
+ if (unlikely(ret))
+ panic("Cannot uncork TCP socket!\n");
+}
+
+void set_sock_cork(int fd, int udp)
+{
+ if (!!udp)
+ set_udp_cork(fd);
+ else
+ set_tcp_cork(fd);
+}
+
+void set_sock_uncork(int fd, int udp)
+{
+ if (!!udp)
+ set_udp_uncork(fd);
+ else
+ set_tcp_uncork(fd);
+}