summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--corking.c66
-rw-r--r--corking.h11
-rw-r--r--ct_client.c1
-rw-r--r--ct_server.c1
-rw-r--r--curvetun/Makefile1
-rw-r--r--xutils.c52
-rw-r--r--xutils.h6
7 files changed, 80 insertions, 58 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);
+}
diff --git a/corking.h b/corking.h
new file mode 100644
index 0000000..b240595
--- /dev/null
+++ b/corking.h
@@ -0,0 +1,11 @@
+#ifndef CORKING_H
+#define CORKING_H
+
+extern void set_tcp_cork(int fd);
+extern void set_tcp_uncork(int fd);
+extern void set_udp_cork(int fd);
+extern void set_udp_uncork(int fd);
+extern void set_sock_cork(int fd, int udp);
+extern void set_sock_uncork(int fd, int udp);
+
+#endif /* CORKING_H */
diff --git a/ct_client.c b/ct_client.c
index d99e7bb..f51371f 100644
--- a/ct_client.c
+++ b/ct_client.c
@@ -32,6 +32,7 @@
#include "xutils.h"
#include "curve.h"
#include "xmalloc.h"
+#include "corking.h"
#include "curvetun.h"
#include "ct_servmgmt.h"
#include "ct_usermgmt.h"
diff --git a/ct_server.c b/ct_server.c
index 7c23b52..534b60f 100644
--- a/ct_server.c
+++ b/ct_server.c
@@ -34,6 +34,7 @@
#include "xmalloc.h"
#include "curvetun.h"
#include "curve.h"
+#include "corking.h"
#include "cpus.h"
#include "built_in.h"
#include "ct_usermgmt.h"
diff --git a/curvetun/Makefile b/curvetun/Makefile
index c54f8e2..44025ac 100644
--- a/curvetun/Makefile
+++ b/curvetun/Makefile
@@ -7,6 +7,7 @@ curvetun-objs = xmalloc.o \
str.o \
stun.o \
patricia.o \
+ corking.o \
trie.o \
hash.o \
curve.o \
diff --git a/xutils.c b/xutils.c
index 9b81fea..e3e7f6f 100644
--- a/xutils.c
+++ b/xutils.c
@@ -102,58 +102,6 @@ void set_sock_prio(int fd, int prio)
panic("Cannot set socket priority!\n");
}
-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);
-}
-
void set_nonblocking(int fd)
{
int ret = fcntl(fd, F_SETFL, fcntl(fd, F_GETFD, 0) | O_NONBLOCK);
diff --git a/xutils.h b/xutils.h
index 1d40a85..eda512d 100644
--- a/xutils.h
+++ b/xutils.h
@@ -44,12 +44,6 @@ extern void set_nonblocking(int fd);
extern int set_nonblocking_sloppy(int fd);
extern int set_reuseaddr(int fd);
extern void set_sock_prio(int fd, int prio);
-extern void set_tcp_cork(int fd);
-extern void set_tcp_uncork(int fd);
-extern void set_udp_cork(int fd);
-extern void set_udp_uncork(int fd);
-extern void set_sock_cork(int fd, int udp);
-extern void set_sock_uncork(int fd, int udp);
extern void set_tcp_nodelay(int fd);
extern void set_socket_keepalive(int fd);
extern int set_ipv6_only(int fd);