/* Generated by ./xlat/gen.sh from ./xlat/sock_tcp_options.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(TCP_NODELAY) || (defined(HAVE_DECL_TCP_NODELAY) && HAVE_DECL_TCP_NODELAY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_NODELAY) == (1), "TCP_NODELAY != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_NODELAY 1
#endif
#if defined(TCP_MAXSEG) || (defined(HAVE_DECL_TCP_MAXSEG) && HAVE_DECL_TCP_MAXSEG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_MAXSEG) == (2), "TCP_MAXSEG != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_MAXSEG 2
#endif
#if defined(TCP_CORK) || (defined(HAVE_DECL_TCP_CORK) && HAVE_DECL_TCP_CORK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_CORK) == (3), "TCP_CORK != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_CORK 3
#endif
#if defined(TCP_KEEPIDLE) || (defined(HAVE_DECL_TCP_KEEPIDLE) && HAVE_DECL_TCP_KEEPIDLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_KEEPIDLE) == (4), "TCP_KEEPIDLE != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_KEEPIDLE 4
#endif
#if defined(TCP_KEEPINTVL) || (defined(HAVE_DECL_TCP_KEEPINTVL) && HAVE_DECL_TCP_KEEPINTVL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_KEEPINTVL) == (5), "TCP_KEEPINTVL != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_KEEPINTVL 5
#endif
#if defined(TCP_KEEPCNT) || (defined(HAVE_DECL_TCP_KEEPCNT) && HAVE_DECL_TCP_KEEPCNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_KEEPCNT) == (6), "TCP_KEEPCNT != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_KEEPCNT 6
#endif
#if defined(TCP_SYNCNT) || (defined(HAVE_DECL_TCP_SYNCNT) && HAVE_DECL_TCP_SYNCNT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_SYNCNT) == (7), "TCP_SYNCNT != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_SYNCNT 7
#endif
#if defined(TCP_LINGER2) || (defined(HAVE_DECL_TCP_LINGER2) && HAVE_DECL_TCP_LINGER2)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_LINGER2) == (8), "TCP_LINGER2 != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_LINGER2 8
#endif
#if defined(TCP_DEFER_ACCEPT) || (defined(HAVE_DECL_TCP_DEFER_ACCEPT) && HAVE_DECL_TCP_DEFER_ACCEPT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_DEFER_ACCEPT) == (9), "TCP_DEFER_ACCEPT != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_DEFER_ACCEPT 9
#endif
#if defined(TCP_WINDOW_CLAMP) || (defined(HAVE_DECL_TCP_WINDOW_CLAMP) && HAVE_DECL_TCP_WINDOW_CLAMP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_WINDOW_CLAMP) == (10), "TCP_WINDOW_CLAMP != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_WINDOW_CLAMP 10
#endif
#if defined(TCP_INFO) || (defined(HAVE_DECL_TCP_INFO) && HAVE_DECL_TCP_INFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_INFO) == (11), "TCP_INFO != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_INFO 11
#endif
#if defined(TCP_QUICKACK) || (defined(HAVE_DECL_TCP_QUICKACK) && HAVE_DECL_TCP_QUICKACK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_QUICKACK) == (12), "TCP_QUICKACK != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_QUICKACK 12
#endif
#if defined(TCP_CONGESTION) || (defined(HAVE_DECL_TCP_CONGESTION) && HAVE_DECL_TCP_CONGESTION)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_CONGESTION) == (13), "TCP_CONGESTION != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_CONGESTION 13
#endif
#if defined(TCP_MD5SIG) || (defined(HAVE_DECL_TCP_MD5SIG) && HAVE_DECL_TCP_MD5SIG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_MD5SIG) == (14), "TCP_MD5SIG != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_MD5SIG 14
#endif
#if defined(TCP_COOKIE_TRANSACTIONS) || (defined(HAVE_DECL_TCP_COOKIE_TRANSACTIONS) && HAVE_DECL_TCP_COOKIE_TRANSACTIONS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_COOKIE_TRANSACTIONS) == (15), "TCP_COOKIE_TRANSACTIONS != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_COOKIE_TRANSACTIONS 15
#endif
#if defined(TCP_THIN_LINEAR_TIMEOUTS) || (defined(HAVE_DECL_TCP_THIN_LINEAR_TIMEOUTS) && HAVE_DECL_TCP_THIN_LINEAR_TIMEOUTS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_THIN_LINEAR_TIMEOUTS) == (16), "TCP_THIN_LINEAR_TIMEOUTS != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_THIN_LINEAR_TIMEOUTS 16
#endif
#if defined(TCP_THIN_DUPACK) || (defined(HAVE_DECL_TCP_THIN_DUPACK) && HAVE_DECL_TCP_THIN_DUPACK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_THIN_DUPACK) == (17), "TCP_THIN_DUPACK != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_THIN_DUPACK 17
#endif
#if defined(TCP_USER_TIMEOUT) || (defined(HAVE_DECL_TCP_USER_TIMEOUT) && HAVE_DECL_TCP_USER_TIMEOUT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_USER_TIMEOUT) == (18), "TCP_USER_TIMEOUT != 18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_USER_TIMEOUT 18
#endif
#if defined(TCP_REPAIR) || (defined(HAVE_DECL_TCP_REPAIR) && HAVE_DECL_TCP_REPAIR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_REPAIR) == (19), "TCP_REPAIR != 19");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_REPAIR 19
#endif
#if defined(TCP_REPAIR_QUEUE) || (defined(HAVE_DECL_TCP_REPAIR_QUEUE) && HAVE_DECL_TCP_REPAIR_QUEUE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_REPAIR_QUEUE) == (20), "TCP_REPAIR_QUEUE != 20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_REPAIR_QUEUE 20
#endif
#if defined(TCP_QUEUE_SEQ) || (defined(HAVE_DECL_TCP_QUEUE_SEQ) && HAVE_DECL_TCP_QUEUE_SEQ)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_QUEUE_SEQ) == (21), "TCP_QUEUE_SEQ != 21");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_QUEUE_SEQ 21
#endif
#if defined(TCP_REPAIR_OPTIONS) || (defined(HAVE_DECL_TCP_REPAIR_OPTIONS) && HAVE_DECL_TCP_REPAIR_OPTIONS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_REPAIR_OPTIONS) == (22), "TCP_REPAIR_OPTIONS != 22");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_REPAIR_OPTIONS 22
#endif
#if defined(TCP_FASTOPEN) || (defined(HAVE_DECL_TCP_FASTOPEN) && HAVE_DECL_TCP_FASTOPEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_FASTOPEN) == (23), "TCP_FASTOPEN != 23");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_FASTOPEN 23
#endif
#if defined(TCP_TIMESTAMP) || (defined(HAVE_DECL_TCP_TIMESTAMP) && HAVE_DECL_TCP_TIMESTAMP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_TIMESTAMP) == (24), "TCP_TIMESTAMP != 24");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_TIMESTAMP 24
#endif
#if defined(TCP_NOTSENT_LOWAT) || (defined(HAVE_DECL_TCP_NOTSENT_LOWAT) && HAVE_DECL_TCP_NOTSENT_LOWAT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_NOTSENT_LOWAT) == (25), "TCP_NOTSENT_LOWAT != 25");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_NOTSENT_LOWAT 25
#endif
#if defined(TCP_CC_INFO) || (defined(HAVE_DECL_TCP_CC_INFO) && HAVE_DECL_TCP_CC_INFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_CC_INFO) == (26), "TCP_CC_INFO != 26");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_CC_INFO 26
#endif
#if defined(TCP_SAVE_SYN) || (defined(HAVE_DECL_TCP_SAVE_SYN) && HAVE_DECL_TCP_SAVE_SYN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_SAVE_SYN) == (27), "TCP_SAVE_SYN != 27");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_SAVE_SYN 27
#endif
#if defined(TCP_SAVED_SYN) || (defined(HAVE_DECL_TCP_SAVED_SYN) && HAVE_DECL_TCP_SAVED_SYN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_SAVED_SYN) == (28), "TCP_SAVED_SYN != 28");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_SAVED_SYN 28
#endif
#if defined(TCP_REPAIR_WINDOW) || (defined(HAVE_DECL_TCP_REPAIR_WINDOW) && HAVE_DECL_TCP_REPAIR_WINDOW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_REPAIR_WINDOW) == (29), "TCP_REPAIR_WINDOW != 29");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_REPAIR_WINDOW 29
#endif
#if defined(TCP_FASTOPEN_CONNECT) || (defined(HAVE_DECL_TCP_FASTOPEN_CONNECT) && HAVE_DECL_TCP_FASTOPEN_CONNECT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_FASTOPEN_CONNECT) == (30), "TCP_FASTOPEN_CONNECT != 30");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_FASTOPEN_CONNECT 30
#endif
#if defined(TCP_ULP) || (defined(HAVE_DECL_TCP_ULP) && HAVE_DECL_TCP_ULP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_ULP) == (31), "TCP_ULP != 31");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_ULP 31
#endif
#if defined(TCP_MD5SIG_EXT) || (defined(HAVE_DECL_TCP_MD5SIG_EXT) && HAVE_DECL_TCP_MD5SIG_EXT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_MD5SIG_EXT) == (32), "TCP_MD5SIG_EXT != 32");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_MD5SIG_EXT 32
#endif
#if defined(TCP_FASTOPEN_KEY) || (defined(HAVE_DECL_TCP_FASTOPEN_KEY) && HAVE_DECL_TCP_FASTOPEN_KEY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_FASTOPEN_KEY) == (33), "TCP_FASTOPEN_KEY != 33");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_FASTOPEN_KEY 33
#endif
#if defined(TCP_FASTOPEN_NO_COOKIE) || (defined(HAVE_DECL_TCP_FASTOPEN_NO_COOKIE) && HAVE_DECL_TCP_FASTOPEN_NO_COOKIE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_FASTOPEN_NO_COOKIE) == (34), "TCP_FASTOPEN_NO_COOKIE != 34");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_FASTOPEN_NO_COOKIE 34
#endif
#if defined(TCP_ZEROCOPY_RECEIVE) || (defined(HAVE_DECL_TCP_ZEROCOPY_RECEIVE) && HAVE_DECL_TCP_ZEROCOPY_RECEIVE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_ZEROCOPY_RECEIVE) == (35), "TCP_ZEROCOPY_RECEIVE != 35");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_ZEROCOPY_RECEIVE 35
#endif
#if defined(TCP_INQ) || (defined(HAVE_DECL_TCP_INQ) && HAVE_DECL_TCP_INQ)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_INQ) == (36), "TCP_INQ != 36");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_INQ 36
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat sock_tcp_options in mpers mode

# else

static
const struct xlat sock_tcp_options[] = {
 [TCP_NODELAY] = XLAT(TCP_NODELAY),
 [TCP_MAXSEG] = XLAT(TCP_MAXSEG),
 [TCP_CORK] = XLAT(TCP_CORK),
 [TCP_KEEPIDLE] = XLAT(TCP_KEEPIDLE),
 [TCP_KEEPINTVL] = XLAT(TCP_KEEPINTVL),
 [TCP_KEEPCNT] = XLAT(TCP_KEEPCNT),
 [TCP_SYNCNT] = XLAT(TCP_SYNCNT),
 [TCP_LINGER2] = XLAT(TCP_LINGER2),
 [TCP_DEFER_ACCEPT] = XLAT(TCP_DEFER_ACCEPT),
 [TCP_WINDOW_CLAMP] = XLAT(TCP_WINDOW_CLAMP),
 [TCP_INFO] = XLAT(TCP_INFO),
 [TCP_QUICKACK] = XLAT(TCP_QUICKACK),
 [TCP_CONGESTION] = XLAT(TCP_CONGESTION),
 [TCP_MD5SIG] = XLAT(TCP_MD5SIG),
 [TCP_COOKIE_TRANSACTIONS] = XLAT(TCP_COOKIE_TRANSACTIONS),
 [TCP_THIN_LINEAR_TIMEOUTS] = XLAT(TCP_THIN_LINEAR_TIMEOUTS),
 [TCP_THIN_DUPACK] = XLAT(TCP_THIN_DUPACK),
 [TCP_USER_TIMEOUT] = XLAT(TCP_USER_TIMEOUT),
 [TCP_REPAIR] = XLAT(TCP_REPAIR),
 [TCP_REPAIR_QUEUE] = XLAT(TCP_REPAIR_QUEUE),
 [TCP_QUEUE_SEQ] = XLAT(TCP_QUEUE_SEQ),
 [TCP_REPAIR_OPTIONS] = XLAT(TCP_REPAIR_OPTIONS),
 [TCP_FASTOPEN] = XLAT(TCP_FASTOPEN),
 [TCP_TIMESTAMP] = XLAT(TCP_TIMESTAMP),
 [TCP_NOTSENT_LOWAT] = XLAT(TCP_NOTSENT_LOWAT),
 [TCP_CC_INFO] = XLAT(TCP_CC_INFO),
 [TCP_SAVE_SYN] = XLAT(TCP_SAVE_SYN),
 [TCP_SAVED_SYN] = XLAT(TCP_SAVED_SYN),
 [TCP_REPAIR_WINDOW] = XLAT(TCP_REPAIR_WINDOW),
 [TCP_FASTOPEN_CONNECT] = XLAT(TCP_FASTOPEN_CONNECT),
 [TCP_ULP] = XLAT(TCP_ULP),
 [TCP_MD5SIG_EXT] = XLAT(TCP_MD5SIG_EXT),
 [TCP_FASTOPEN_KEY] = XLAT(TCP_FASTOPEN_KEY),
 [TCP_FASTOPEN_NO_COOKIE] = XLAT(TCP_FASTOPEN_NO_COOKIE),
 [TCP_ZEROCOPY_RECEIVE] = XLAT(TCP_ZEROCOPY_RECEIVE),
 [TCP_INQ] = XLAT(TCP_INQ),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
