diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2021-04-25 13:34:04 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2021-04-29 17:15:26 +0200 |
commit | db1fe773a3eacbf2b3ce0b3333f1684291fa5c2d (patch) | |
tree | 72c07fb27d823acb1f48ca70284a7298c1060d4d /util.h | |
parent | 48afbe321eddfb68966a4436884c022e64c3e166 (diff) | |
download | passt-db1fe773a3eacbf2b3ce0b3333f1684291fa5c2d.tar passt-db1fe773a3eacbf2b3ce0b3333f1684291fa5c2d.tar.gz passt-db1fe773a3eacbf2b3ce0b3333f1684291fa5c2d.tar.bz2 passt-db1fe773a3eacbf2b3ce0b3333f1684291fa5c2d.tar.lz passt-db1fe773a3eacbf2b3ce0b3333f1684291fa5c2d.tar.xz passt-db1fe773a3eacbf2b3ce0b3333f1684291fa5c2d.tar.zst passt-db1fe773a3eacbf2b3ce0b3333f1684291fa5c2d.zip |
tcp: Avoid SO_ACCEPTCONN getsockopt() by noting listening/data sockets numbers
...the rest is reshuffling existing macros to use the bits we need in
TCP code.
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'util.h')
-rw-r--r-- | util.h | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -8,6 +8,25 @@ void debug(const char *format, ...); #define debug(...) { } #endif +#define CHECK_SET_MIN_MAX(basename, fd) \ + do { \ + if ((fd) < basename##min) \ + basename##min = (fd); \ + if ((fd) > basename##max) \ + basename##max = (fd); \ + } while (0) + +#define CHECK_SET_MIN_MAX_PROTO_FD(proto, ipproto, proto_ctx, fd) \ + do { \ + if ((proto) == (ipproto)) \ + CHECK_SET_MIN_MAX(c->proto_ctx.fd_, (fd)); \ + } while (0) + +#define IN_INTERVAL(a, b, x) ((x) >= (a) && (x) <= (b)) + +#define FD_PROTO(x, proto) \ + (IN_INTERVAL(c->proto.fd_min, c->proto.fd_max, (x))) + uint16_t csum_fold(uint32_t sum); uint16_t csum_ip4(void *buf, size_t len); void csum_tcp4(struct iphdr *iph); |