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

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

#if defined(ISDN_P_BASE) || (defined(HAVE_DECL_ISDN_P_BASE) && HAVE_DECL_ISDN_P_BASE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_BASE) == (0), "ISDN_P_BASE != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_BASE 0
#endif
#if defined(ISDN_P_TE_S0) || (defined(HAVE_DECL_ISDN_P_TE_S0) && HAVE_DECL_ISDN_P_TE_S0)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_TE_S0) == (1), "ISDN_P_TE_S0 != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_TE_S0 1
#endif
#if defined(ISDN_P_NT_S0) || (defined(HAVE_DECL_ISDN_P_NT_S0) && HAVE_DECL_ISDN_P_NT_S0)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_NT_S0) == (2), "ISDN_P_NT_S0 != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_NT_S0 2
#endif
#if defined(ISDN_P_TE_E1) || (defined(HAVE_DECL_ISDN_P_TE_E1) && HAVE_DECL_ISDN_P_TE_E1)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_TE_E1) == (3), "ISDN_P_TE_E1 != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_TE_E1 3
#endif
#if defined(ISDN_P_NT_E1) || (defined(HAVE_DECL_ISDN_P_NT_E1) && HAVE_DECL_ISDN_P_NT_E1)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_NT_E1) == (4), "ISDN_P_NT_E1 != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_NT_E1 4
#endif
#if defined(ISDN_P_LAPD_TE) || (defined(HAVE_DECL_ISDN_P_LAPD_TE) && HAVE_DECL_ISDN_P_LAPD_TE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_LAPD_TE) == (0x10), "ISDN_P_LAPD_TE != 0x10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_LAPD_TE 0x10
#endif
#if defined(ISDN_P_LAPD_NT) || (defined(HAVE_DECL_ISDN_P_LAPD_NT) && HAVE_DECL_ISDN_P_LAPD_NT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_LAPD_NT) == (0x11), "ISDN_P_LAPD_NT != 0x11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_LAPD_NT 0x11
#endif
#if defined(ISDN_P_B_RAW) || (defined(HAVE_DECL_ISDN_P_B_RAW) && HAVE_DECL_ISDN_P_B_RAW)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_B_RAW) == (0x21), "ISDN_P_B_RAW != 0x21");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_B_RAW 0x21
#endif
#if defined(ISDN_P_B_HDLC) || (defined(HAVE_DECL_ISDN_P_B_HDLC) && HAVE_DECL_ISDN_P_B_HDLC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_B_HDLC) == (0x22), "ISDN_P_B_HDLC != 0x22");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_B_HDLC 0x22
#endif
#if defined(ISDN_P_B_X75SLP) || (defined(HAVE_DECL_ISDN_P_B_X75SLP) && HAVE_DECL_ISDN_P_B_X75SLP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_B_X75SLP) == (0x23), "ISDN_P_B_X75SLP != 0x23");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_B_X75SLP 0x23
#endif
#if defined(ISDN_P_B_L2DTMF) || (defined(HAVE_DECL_ISDN_P_B_L2DTMF) && HAVE_DECL_ISDN_P_B_L2DTMF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_B_L2DTMF) == (0x24), "ISDN_P_B_L2DTMF != 0x24");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_B_L2DTMF 0x24
#endif
#if defined(ISDN_P_B_L2DSP) || (defined(HAVE_DECL_ISDN_P_B_L2DSP) && HAVE_DECL_ISDN_P_B_L2DSP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_B_L2DSP) == (0x25), "ISDN_P_B_L2DSP != 0x25");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_B_L2DSP 0x25
#endif
#if defined(ISDN_P_B_L2DSPHDLC) || (defined(HAVE_DECL_ISDN_P_B_L2DSPHDLC) && HAVE_DECL_ISDN_P_B_L2DSPHDLC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ISDN_P_B_L2DSPHDLC) == (0x26), "ISDN_P_B_L2DSPHDLC != 0x26");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ISDN_P_B_L2DSPHDLC 0x26
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat isdn_protocols in mpers mode

# else

static
const struct xlat isdn_protocols[] = {
 XLAT(ISDN_P_BASE),
 XLAT(ISDN_P_TE_S0),
 XLAT(ISDN_P_NT_S0),
 XLAT(ISDN_P_TE_E1),
 XLAT(ISDN_P_NT_E1),
 XLAT(ISDN_P_LAPD_TE),
 XLAT(ISDN_P_LAPD_NT),
 XLAT(ISDN_P_B_RAW),
 XLAT(ISDN_P_B_HDLC),
 XLAT(ISDN_P_B_X75SLP),
 XLAT(ISDN_P_B_L2DTMF),
 XLAT(ISDN_P_B_L2DSP),
 XLAT(ISDN_P_B_L2DSPHDLC),
/*
* those two are present in include/linux/mISDNif.h but are not handled during
* socket creation.
*/


 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
