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

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

#if defined(CAN_RAW) || (defined(HAVE_DECL_CAN_RAW) && HAVE_DECL_CAN_RAW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((CAN_RAW) == (1), "CAN_RAW != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define CAN_RAW 1
#endif
#if defined(CAN_BCM) || (defined(HAVE_DECL_CAN_BCM) && HAVE_DECL_CAN_BCM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((CAN_BCM) == (2), "CAN_BCM != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define CAN_BCM 2
#endif
#if defined(CAN_TP16) || (defined(HAVE_DECL_CAN_TP16) && HAVE_DECL_CAN_TP16)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((CAN_TP16) == (3), "CAN_TP16 != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define CAN_TP16 3
#endif
#if defined(CAN_TP20) || (defined(HAVE_DECL_CAN_TP20) && HAVE_DECL_CAN_TP20)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((CAN_TP20) == (4), "CAN_TP20 != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define CAN_TP20 4
#endif
#if defined(CAN_MCNET) || (defined(HAVE_DECL_CAN_MCNET) && HAVE_DECL_CAN_MCNET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((CAN_MCNET) == (5), "CAN_MCNET != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define CAN_MCNET 5
#endif
#if defined(CAN_ISOTP) || (defined(HAVE_DECL_CAN_ISOTP) && HAVE_DECL_CAN_ISOTP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((CAN_ISOTP) == (6), "CAN_ISOTP != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define CAN_ISOTP 6
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat can_protocols in mpers mode

# else

static
const struct xlat can_protocols[] = {
 [CAN_RAW] = XLAT(CAN_RAW),
 [CAN_BCM] = XLAT(CAN_BCM),
 [CAN_TP16] = XLAT(CAN_TP16),
 [CAN_TP20] = XLAT(CAN_TP20),
 [CAN_MCNET] = XLAT(CAN_MCNET),
 [CAN_ISOTP] = XLAT(CAN_ISOTP),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
