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

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

#if defined(BT_SECURITY) || (defined(HAVE_DECL_BT_SECURITY) && HAVE_DECL_BT_SECURITY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BT_SECURITY) == (4), "BT_SECURITY != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BT_SECURITY 4
#endif
#if defined(BT_DEFER_SETUP) || (defined(HAVE_DECL_BT_DEFER_SETUP) && HAVE_DECL_BT_DEFER_SETUP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BT_DEFER_SETUP) == (7), "BT_DEFER_SETUP != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BT_DEFER_SETUP 7
#endif
#if defined(BT_FLUSHABLE) || (defined(HAVE_DECL_BT_FLUSHABLE) && HAVE_DECL_BT_FLUSHABLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BT_FLUSHABLE) == (8), "BT_FLUSHABLE != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BT_FLUSHABLE 8
#endif
#if defined(BT_POWER) || (defined(HAVE_DECL_BT_POWER) && HAVE_DECL_BT_POWER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BT_POWER) == (9), "BT_POWER != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BT_POWER 9
#endif
#if defined(BT_CHANNEL_POLICY) || (defined(HAVE_DECL_BT_CHANNEL_POLICY) && HAVE_DECL_BT_CHANNEL_POLICY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BT_CHANNEL_POLICY) == (10), "BT_CHANNEL_POLICY != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BT_CHANNEL_POLICY 10
#endif
#if defined(BT_VOICE) || (defined(HAVE_DECL_BT_VOICE) && HAVE_DECL_BT_VOICE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BT_VOICE) == (11), "BT_VOICE != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BT_VOICE 11
#endif
#if defined(BT_SNDMTU) || (defined(HAVE_DECL_BT_SNDMTU) && HAVE_DECL_BT_SNDMTU)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BT_SNDMTU) == (12), "BT_SNDMTU != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BT_SNDMTU 12
#endif
#if defined(BT_RCVMTU) || (defined(HAVE_DECL_BT_RCVMTU) && HAVE_DECL_BT_RCVMTU)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BT_RCVMTU) == (13), "BT_RCVMTU != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BT_RCVMTU 13
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat sock_bluetooth_options in mpers mode

# else

static
const struct xlat sock_bluetooth_options[] = {

 XLAT(BT_SECURITY),
 XLAT(BT_DEFER_SETUP),
 XLAT(BT_FLUSHABLE),
 XLAT(BT_POWER),
 XLAT(BT_CHANNEL_POLICY),
 XLAT(BT_VOICE),
 XLAT(BT_SNDMTU),
 XLAT(BT_RCVMTU),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
