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

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

#if defined(TCP_ESTABLISHED) || (defined(HAVE_DECL_TCP_ESTABLISHED) && HAVE_DECL_TCP_ESTABLISHED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_ESTABLISHED) == (1), "TCP_ESTABLISHED != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_ESTABLISHED 1
#endif
#if defined(TCP_SYN_SENT) || (defined(HAVE_DECL_TCP_SYN_SENT) && HAVE_DECL_TCP_SYN_SENT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_SYN_SENT) == (2), "TCP_SYN_SENT != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_SYN_SENT 2
#endif
#if defined(TCP_SYN_RECV) || (defined(HAVE_DECL_TCP_SYN_RECV) && HAVE_DECL_TCP_SYN_RECV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_SYN_RECV) == (3), "TCP_SYN_RECV != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_SYN_RECV 3
#endif
#if defined(TCP_FIN_WAIT1) || (defined(HAVE_DECL_TCP_FIN_WAIT1) && HAVE_DECL_TCP_FIN_WAIT1)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_FIN_WAIT1) == (4), "TCP_FIN_WAIT1 != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_FIN_WAIT1 4
#endif
#if defined(TCP_FIN_WAIT2) || (defined(HAVE_DECL_TCP_FIN_WAIT2) && HAVE_DECL_TCP_FIN_WAIT2)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_FIN_WAIT2) == (5), "TCP_FIN_WAIT2 != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_FIN_WAIT2 5
#endif
#if defined(TCP_TIME_WAIT) || (defined(HAVE_DECL_TCP_TIME_WAIT) && HAVE_DECL_TCP_TIME_WAIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_TIME_WAIT) == (6), "TCP_TIME_WAIT != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_TIME_WAIT 6
#endif
#if defined(TCP_CLOSE) || (defined(HAVE_DECL_TCP_CLOSE) && HAVE_DECL_TCP_CLOSE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_CLOSE) == (7), "TCP_CLOSE != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_CLOSE 7
#endif
#if defined(TCP_CLOSE_WAIT) || (defined(HAVE_DECL_TCP_CLOSE_WAIT) && HAVE_DECL_TCP_CLOSE_WAIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_CLOSE_WAIT) == (8), "TCP_CLOSE_WAIT != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_CLOSE_WAIT 8
#endif
#if defined(TCP_LAST_ACK) || (defined(HAVE_DECL_TCP_LAST_ACK) && HAVE_DECL_TCP_LAST_ACK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_LAST_ACK) == (9), "TCP_LAST_ACK != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_LAST_ACK 9
#endif
#if defined(TCP_LISTEN) || (defined(HAVE_DECL_TCP_LISTEN) && HAVE_DECL_TCP_LISTEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_LISTEN) == (10), "TCP_LISTEN != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_LISTEN 10
#endif
#if defined(TCP_CLOSING) || (defined(HAVE_DECL_TCP_CLOSING) && HAVE_DECL_TCP_CLOSING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_CLOSING) == (11), "TCP_CLOSING != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_CLOSING 11
#endif
#if defined(TCP_NEW_SYN_RECV) || (defined(HAVE_DECL_TCP_NEW_SYN_RECV) && HAVE_DECL_TCP_NEW_SYN_RECV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TCP_NEW_SYN_RECV) == (12), "TCP_NEW_SYN_RECV != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TCP_NEW_SYN_RECV 12
#endif

#ifndef XLAT_MACROS_ONLY

# ifndef IN_MPERS

const struct xlat tcp_states[] = {
 XLAT(TCP_ESTABLISHED),
 XLAT(TCP_SYN_SENT),
 XLAT(TCP_SYN_RECV),
 XLAT(TCP_FIN_WAIT1),
 XLAT(TCP_FIN_WAIT2),
 XLAT(TCP_TIME_WAIT),
 XLAT(TCP_CLOSE),
 XLAT(TCP_CLOSE_WAIT),
 XLAT(TCP_LAST_ACK),
 XLAT(TCP_LISTEN),
 XLAT(TCP_CLOSING),
 XLAT(TCP_NEW_SYN_RECV),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
