From 1c0df00bdead4a02df12d610401dd34f7ea59a01 Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Tue, 4 Jun 2013 00:24:37 +0200 Subject: [PATCH] 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 --- corking.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ corking.h | 11 ++++++++++ ct_client.c | 1 + ct_server.c | 1 + curvetun/Makefile | 1 + xutils.c | 52 ------------------------------------------- xutils.h | 6 ----- 7 files changed, 80 insertions(+), 58 deletions(-) create mode 100644 corking.c create mode 100644 corking.h diff --git a/corking.c b/corking.c new file mode 100644 index 00000000..a6e0f849 --- /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 +#include +#include +#include +#include + +#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 00000000..b2405957 --- /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 d99e7bb0..f51371fd 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 7c23b527..534b60f3 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 c54f8e28..44025ac3 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 9b81feae..e3e7f6f3 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 1d40a85d..eda512de 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); -- 2.11.4.GIT