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

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

#if defined(SMC_ACTIVE) || (defined(HAVE_DECL_SMC_ACTIVE) && HAVE_DECL_SMC_ACTIVE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_ACTIVE) == (1), "SMC_ACTIVE != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_ACTIVE 1
#endif
#if defined(SMC_INIT) || (defined(HAVE_DECL_SMC_INIT) && HAVE_DECL_SMC_INIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_INIT) == (2), "SMC_INIT != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_INIT 2
#endif
#if defined(SMC_CLOSED) || (defined(HAVE_DECL_SMC_CLOSED) && HAVE_DECL_SMC_CLOSED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLOSED) == (7), "SMC_CLOSED != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLOSED 7
#endif
#if defined(SMC_LISTEN) || (defined(HAVE_DECL_SMC_LISTEN) && HAVE_DECL_SMC_LISTEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_LISTEN) == (10), "SMC_LISTEN != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_LISTEN 10
#endif
#if defined(SMC_PEERCLOSEWAIT1) || (defined(HAVE_DECL_SMC_PEERCLOSEWAIT1) && HAVE_DECL_SMC_PEERCLOSEWAIT1)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_PEERCLOSEWAIT1) == (20), "SMC_PEERCLOSEWAIT1 != 20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_PEERCLOSEWAIT1 20
#endif
#if defined(SMC_PEERCLOSEWAIT2) || (defined(HAVE_DECL_SMC_PEERCLOSEWAIT2) && HAVE_DECL_SMC_PEERCLOSEWAIT2)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_PEERCLOSEWAIT2) == (21), "SMC_PEERCLOSEWAIT2 != 21");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_PEERCLOSEWAIT2 21
#endif
#if defined(SMC_APPFINCLOSEWAIT) || (defined(HAVE_DECL_SMC_APPFINCLOSEWAIT) && HAVE_DECL_SMC_APPFINCLOSEWAIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_APPFINCLOSEWAIT) == (24), "SMC_APPFINCLOSEWAIT != 24");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_APPFINCLOSEWAIT 24
#endif
#if defined(SMC_APPCLOSEWAIT1) || (defined(HAVE_DECL_SMC_APPCLOSEWAIT1) && HAVE_DECL_SMC_APPCLOSEWAIT1)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_APPCLOSEWAIT1) == (22), "SMC_APPCLOSEWAIT1 != 22");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_APPCLOSEWAIT1 22
#endif
#if defined(SMC_APPCLOSEWAIT2) || (defined(HAVE_DECL_SMC_APPCLOSEWAIT2) && HAVE_DECL_SMC_APPCLOSEWAIT2)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_APPCLOSEWAIT2) == (23), "SMC_APPCLOSEWAIT2 != 23");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_APPCLOSEWAIT2 23
#endif
#if defined(SMC_PEERFINCLOSEWAIT) || (defined(HAVE_DECL_SMC_PEERFINCLOSEWAIT) && HAVE_DECL_SMC_PEERFINCLOSEWAIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_PEERFINCLOSEWAIT) == (25), "SMC_PEERFINCLOSEWAIT != 25");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_PEERFINCLOSEWAIT 25
#endif
#if defined(SMC_PEERABORTWAIT) || (defined(HAVE_DECL_SMC_PEERABORTWAIT) && HAVE_DECL_SMC_PEERABORTWAIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_PEERABORTWAIT) == (26), "SMC_PEERABORTWAIT != 26");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_PEERABORTWAIT 26
#endif
#if defined(SMC_PROCESSABORT) || (defined(HAVE_DECL_SMC_PROCESSABORT) && HAVE_DECL_SMC_PROCESSABORT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_PROCESSABORT) == (27), "SMC_PROCESSABORT != 27");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_PROCESSABORT 27
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat smc_states in mpers mode

# else

static
const struct xlat smc_states[] = {
 XLAT(SMC_ACTIVE),
 XLAT(SMC_INIT),
 XLAT(SMC_CLOSED),
 XLAT(SMC_LISTEN),
 XLAT(SMC_PEERCLOSEWAIT1),
 XLAT(SMC_PEERCLOSEWAIT2),
 XLAT(SMC_APPFINCLOSEWAIT),
 XLAT(SMC_APPCLOSEWAIT1),
 XLAT(SMC_APPCLOSEWAIT2),
 XLAT(SMC_PEERFINCLOSEWAIT),
 XLAT(SMC_PEERABORTWAIT),
 XLAT(SMC_PROCESSABORT),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
