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

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

#if defined(LLC_OPT_UNKNOWN) || (defined(HAVE_DECL_LLC_OPT_UNKNOWN) && HAVE_DECL_LLC_OPT_UNKNOWN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_UNKNOWN) == (0), "LLC_OPT_UNKNOWN != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_UNKNOWN 0
#endif
#if defined(LLC_OPT_RETRY) || (defined(HAVE_DECL_LLC_OPT_RETRY) && HAVE_DECL_LLC_OPT_RETRY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_RETRY) == (1), "LLC_OPT_RETRY != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_RETRY 1
#endif
#if defined(LLC_OPT_SIZE) || (defined(HAVE_DECL_LLC_OPT_SIZE) && HAVE_DECL_LLC_OPT_SIZE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_SIZE) == (2), "LLC_OPT_SIZE != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_SIZE 2
#endif
#if defined(LLC_OPT_ACK_TMR_EXP) || (defined(HAVE_DECL_LLC_OPT_ACK_TMR_EXP) && HAVE_DECL_LLC_OPT_ACK_TMR_EXP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_ACK_TMR_EXP) == (3), "LLC_OPT_ACK_TMR_EXP != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_ACK_TMR_EXP 3
#endif
#if defined(LLC_OPT_P_TMR_EXP) || (defined(HAVE_DECL_LLC_OPT_P_TMR_EXP) && HAVE_DECL_LLC_OPT_P_TMR_EXP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_P_TMR_EXP) == (4), "LLC_OPT_P_TMR_EXP != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_P_TMR_EXP 4
#endif
#if defined(LLC_OPT_REJ_TMR_EXP) || (defined(HAVE_DECL_LLC_OPT_REJ_TMR_EXP) && HAVE_DECL_LLC_OPT_REJ_TMR_EXP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_REJ_TMR_EXP) == (5), "LLC_OPT_REJ_TMR_EXP != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_REJ_TMR_EXP 5
#endif
#if defined(LLC_OPT_BUSY_TMR_EXP) || (defined(HAVE_DECL_LLC_OPT_BUSY_TMR_EXP) && HAVE_DECL_LLC_OPT_BUSY_TMR_EXP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_BUSY_TMR_EXP) == (6), "LLC_OPT_BUSY_TMR_EXP != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_BUSY_TMR_EXP 6
#endif
#if defined(LLC_OPT_TX_WIN) || (defined(HAVE_DECL_LLC_OPT_TX_WIN) && HAVE_DECL_LLC_OPT_TX_WIN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_TX_WIN) == (7), "LLC_OPT_TX_WIN != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_TX_WIN 7
#endif
#if defined(LLC_OPT_RX_WIN) || (defined(HAVE_DECL_LLC_OPT_RX_WIN) && HAVE_DECL_LLC_OPT_RX_WIN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_RX_WIN) == (8), "LLC_OPT_RX_WIN != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_RX_WIN 8
#endif
#if defined(LLC_OPT_PKTINFO) || (defined(HAVE_DECL_LLC_OPT_PKTINFO) && HAVE_DECL_LLC_OPT_PKTINFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LLC_OPT_PKTINFO) == (9), "LLC_OPT_PKTINFO != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LLC_OPT_PKTINFO 9
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat sock_llc_options in mpers mode

# else

static
const struct xlat sock_llc_options[] = {
 [LLC_OPT_UNKNOWN] = XLAT(LLC_OPT_UNKNOWN),
 [LLC_OPT_RETRY] = XLAT(LLC_OPT_RETRY),
 [LLC_OPT_SIZE] = XLAT(LLC_OPT_SIZE),
 [LLC_OPT_ACK_TMR_EXP] = XLAT(LLC_OPT_ACK_TMR_EXP),
 [LLC_OPT_P_TMR_EXP] = XLAT(LLC_OPT_P_TMR_EXP),
 [LLC_OPT_REJ_TMR_EXP] = XLAT(LLC_OPT_REJ_TMR_EXP),
 [LLC_OPT_BUSY_TMR_EXP] = XLAT(LLC_OPT_BUSY_TMR_EXP),
 [LLC_OPT_TX_WIN] = XLAT(LLC_OPT_TX_WIN),
 [LLC_OPT_RX_WIN] = XLAT(LLC_OPT_RX_WIN),
 [LLC_OPT_PKTINFO] = XLAT(LLC_OPT_PKTINFO),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
