diff options
-rw-r--r-- | corking.c | 66 | ||||
-rw-r--r-- | corking.h | 11 | ||||
-rw-r--r-- | ct_client.c | 1 | ||||
-rw-r--r-- | ct_server.c | 1 | ||||
-rw-r--r-- | curvetun/Makefile | 1 | ||||
-rw-r--r-- | xutils.c | 52 | ||||
-rw-r--r-- | xutils.h | 6 |
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 \ @@ -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); @@ -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); |