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

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

#if defined(DCCP_SOCKOPT_PACKET_SIZE) || (defined(HAVE_DECL_DCCP_SOCKOPT_PACKET_SIZE) && HAVE_DECL_DCCP_SOCKOPT_PACKET_SIZE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_PACKET_SIZE) == (1), "DCCP_SOCKOPT_PACKET_SIZE != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_PACKET_SIZE 1
#endif
#if defined(DCCP_SOCKOPT_SERVICE) || (defined(HAVE_DECL_DCCP_SOCKOPT_SERVICE) && HAVE_DECL_DCCP_SOCKOPT_SERVICE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_SERVICE) == (2), "DCCP_SOCKOPT_SERVICE != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_SERVICE 2
#endif
#if defined(DCCP_SOCKOPT_CHANGE_L) || (defined(HAVE_DECL_DCCP_SOCKOPT_CHANGE_L) && HAVE_DECL_DCCP_SOCKOPT_CHANGE_L)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_CHANGE_L) == (3), "DCCP_SOCKOPT_CHANGE_L != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_CHANGE_L 3
#endif
#if defined(DCCP_SOCKOPT_CHANGE_R) || (defined(HAVE_DECL_DCCP_SOCKOPT_CHANGE_R) && HAVE_DECL_DCCP_SOCKOPT_CHANGE_R)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_CHANGE_R) == (4), "DCCP_SOCKOPT_CHANGE_R != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_CHANGE_R 4
#endif
#if defined(DCCP_SOCKOPT_GET_CUR_MPS) || (defined(HAVE_DECL_DCCP_SOCKOPT_GET_CUR_MPS) && HAVE_DECL_DCCP_SOCKOPT_GET_CUR_MPS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_GET_CUR_MPS) == (5), "DCCP_SOCKOPT_GET_CUR_MPS != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_GET_CUR_MPS 5
#endif
#if defined(DCCP_SOCKOPT_SERVER_TIMEWAIT) || (defined(HAVE_DECL_DCCP_SOCKOPT_SERVER_TIMEWAIT) && HAVE_DECL_DCCP_SOCKOPT_SERVER_TIMEWAIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_SERVER_TIMEWAIT) == (6), "DCCP_SOCKOPT_SERVER_TIMEWAIT != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_SERVER_TIMEWAIT 6
#endif
#if defined(DCCP_SOCKOPT_SEND_CSCOV) || (defined(HAVE_DECL_DCCP_SOCKOPT_SEND_CSCOV) && HAVE_DECL_DCCP_SOCKOPT_SEND_CSCOV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_SEND_CSCOV) == (10), "DCCP_SOCKOPT_SEND_CSCOV != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_SEND_CSCOV 10
#endif
#if defined(DCCP_SOCKOPT_RECV_CSCOV) || (defined(HAVE_DECL_DCCP_SOCKOPT_RECV_CSCOV) && HAVE_DECL_DCCP_SOCKOPT_RECV_CSCOV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_RECV_CSCOV) == (11), "DCCP_SOCKOPT_RECV_CSCOV != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_RECV_CSCOV 11
#endif
#if defined(DCCP_SOCKOPT_AVAILABLE_CCIDS) || (defined(HAVE_DECL_DCCP_SOCKOPT_AVAILABLE_CCIDS) && HAVE_DECL_DCCP_SOCKOPT_AVAILABLE_CCIDS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_AVAILABLE_CCIDS) == (12), "DCCP_SOCKOPT_AVAILABLE_CCIDS != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_AVAILABLE_CCIDS 12
#endif
#if defined(DCCP_SOCKOPT_CCID) || (defined(HAVE_DECL_DCCP_SOCKOPT_CCID) && HAVE_DECL_DCCP_SOCKOPT_CCID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_CCID) == (13), "DCCP_SOCKOPT_CCID != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_CCID 13
#endif
#if defined(DCCP_SOCKOPT_TX_CCID) || (defined(HAVE_DECL_DCCP_SOCKOPT_TX_CCID) && HAVE_DECL_DCCP_SOCKOPT_TX_CCID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_TX_CCID) == (14), "DCCP_SOCKOPT_TX_CCID != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_TX_CCID 14
#endif
#if defined(DCCP_SOCKOPT_RX_CCID) || (defined(HAVE_DECL_DCCP_SOCKOPT_RX_CCID) && HAVE_DECL_DCCP_SOCKOPT_RX_CCID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_RX_CCID) == (15), "DCCP_SOCKOPT_RX_CCID != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_RX_CCID 15
#endif
#if defined(DCCP_SOCKOPT_QPOLICY_ID) || (defined(HAVE_DECL_DCCP_SOCKOPT_QPOLICY_ID) && HAVE_DECL_DCCP_SOCKOPT_QPOLICY_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_QPOLICY_ID) == (16), "DCCP_SOCKOPT_QPOLICY_ID != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_QPOLICY_ID 16
#endif
#if defined(DCCP_SOCKOPT_QPOLICY_TXQLEN) || (defined(HAVE_DECL_DCCP_SOCKOPT_QPOLICY_TXQLEN) && HAVE_DECL_DCCP_SOCKOPT_QPOLICY_TXQLEN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_QPOLICY_TXQLEN) == (17), "DCCP_SOCKOPT_QPOLICY_TXQLEN != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_QPOLICY_TXQLEN 17
#endif
#if defined(DCCP_SOCKOPT_CCID_RX_INFO) || (defined(HAVE_DECL_DCCP_SOCKOPT_CCID_RX_INFO) && HAVE_DECL_DCCP_SOCKOPT_CCID_RX_INFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_CCID_RX_INFO) == (128), "DCCP_SOCKOPT_CCID_RX_INFO != 128");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_CCID_RX_INFO 128
#endif
#if defined(DCCP_SOCKOPT_CCID_TX_INFO) || (defined(HAVE_DECL_DCCP_SOCKOPT_CCID_TX_INFO) && HAVE_DECL_DCCP_SOCKOPT_CCID_TX_INFO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DCCP_SOCKOPT_CCID_TX_INFO) == (192), "DCCP_SOCKOPT_CCID_TX_INFO != 192");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DCCP_SOCKOPT_CCID_TX_INFO 192
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat sock_dccp_options in mpers mode

# else

static
const struct xlat sock_dccp_options[] = {

 XLAT(DCCP_SOCKOPT_PACKET_SIZE),
 XLAT(DCCP_SOCKOPT_SERVICE),
 XLAT(DCCP_SOCKOPT_CHANGE_L),
 XLAT(DCCP_SOCKOPT_CHANGE_R),
 XLAT(DCCP_SOCKOPT_GET_CUR_MPS),
 XLAT(DCCP_SOCKOPT_SERVER_TIMEWAIT),
 XLAT(DCCP_SOCKOPT_SEND_CSCOV),
 XLAT(DCCP_SOCKOPT_RECV_CSCOV),
 XLAT(DCCP_SOCKOPT_AVAILABLE_CCIDS),
 XLAT(DCCP_SOCKOPT_CCID),
 XLAT(DCCP_SOCKOPT_TX_CCID),
 XLAT(DCCP_SOCKOPT_RX_CCID),
 XLAT(DCCP_SOCKOPT_QPOLICY_ID),
 XLAT(DCCP_SOCKOPT_QPOLICY_TXQLEN),
 XLAT(DCCP_SOCKOPT_CCID_RX_INFO),
 XLAT(DCCP_SOCKOPT_CCID_TX_INFO),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
