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

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

#if defined(PPPOL2TP_SO_DEBUG) || (defined(HAVE_DECL_PPPOL2TP_SO_DEBUG) && HAVE_DECL_PPPOL2TP_SO_DEBUG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PPPOL2TP_SO_DEBUG) == (1), "PPPOL2TP_SO_DEBUG != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PPPOL2TP_SO_DEBUG 1
#endif
#if defined(PPPOL2TP_SO_RECVSEQ) || (defined(HAVE_DECL_PPPOL2TP_SO_RECVSEQ) && HAVE_DECL_PPPOL2TP_SO_RECVSEQ)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PPPOL2TP_SO_RECVSEQ) == (2), "PPPOL2TP_SO_RECVSEQ != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PPPOL2TP_SO_RECVSEQ 2
#endif
#if defined(PPPOL2TP_SO_SENDSEQ) || (defined(HAVE_DECL_PPPOL2TP_SO_SENDSEQ) && HAVE_DECL_PPPOL2TP_SO_SENDSEQ)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PPPOL2TP_SO_SENDSEQ) == (3), "PPPOL2TP_SO_SENDSEQ != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PPPOL2TP_SO_SENDSEQ 3
#endif
#if defined(PPPOL2TP_SO_LNSMODE) || (defined(HAVE_DECL_PPPOL2TP_SO_LNSMODE) && HAVE_DECL_PPPOL2TP_SO_LNSMODE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PPPOL2TP_SO_LNSMODE) == (4), "PPPOL2TP_SO_LNSMODE != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PPPOL2TP_SO_LNSMODE 4
#endif
#if defined(PPPOL2TP_SO_REORDERTO) || (defined(HAVE_DECL_PPPOL2TP_SO_REORDERTO) && HAVE_DECL_PPPOL2TP_SO_REORDERTO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PPPOL2TP_SO_REORDERTO) == (5), "PPPOL2TP_SO_REORDERTO != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PPPOL2TP_SO_REORDERTO 5
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat sock_pppol2tp_options in mpers mode

# else

static
const struct xlat sock_pppol2tp_options[] = {
 [PPPOL2TP_SO_DEBUG] = XLAT(PPPOL2TP_SO_DEBUG),
 [PPPOL2TP_SO_RECVSEQ] = XLAT(PPPOL2TP_SO_RECVSEQ),
 [PPPOL2TP_SO_SENDSEQ] = XLAT(PPPOL2TP_SO_SENDSEQ),
 [PPPOL2TP_SO_LNSMODE] = XLAT(PPPOL2TP_SO_LNSMODE),
 [PPPOL2TP_SO_REORDERTO] = XLAT(PPPOL2TP_SO_REORDERTO),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
