diff options
author | Daniel Borkmann <dborkman@redhat.com> | 2013-06-04 00:24:37 +0200 |
---|---|---|
committer | Daniel Borkmann <dborkman@redhat.com> | 2013-06-04 00:24:37 +0200 |
commit | 1c0df00bdead4a02df12d610401dd34f7ea59a01 (patch) | |
tree | 4a1f69a3c551bd6a117923961e4d354ed48e5643 /corking.c | |
parent | 380b3ae23e93cf21cdb194a8e599f64ff40988a7 (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.c | 66 |
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); +} |