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

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

#if defined(NLMSGERR_ATTR_UNUSED) || (defined(HAVE_DECL_NLMSGERR_ATTR_UNUSED) && HAVE_DECL_NLMSGERR_ATTR_UNUSED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NLMSGERR_ATTR_UNUSED) == (0), "NLMSGERR_ATTR_UNUSED != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NLMSGERR_ATTR_UNUSED 0
#endif
#if defined(NLMSGERR_ATTR_MSG) || (defined(HAVE_DECL_NLMSGERR_ATTR_MSG) && HAVE_DECL_NLMSGERR_ATTR_MSG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NLMSGERR_ATTR_MSG) == (1), "NLMSGERR_ATTR_MSG != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NLMSGERR_ATTR_MSG 1
#endif
#if defined(NLMSGERR_ATTR_OFFS) || (defined(HAVE_DECL_NLMSGERR_ATTR_OFFS) && HAVE_DECL_NLMSGERR_ATTR_OFFS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NLMSGERR_ATTR_OFFS) == (2), "NLMSGERR_ATTR_OFFS != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NLMSGERR_ATTR_OFFS 2
#endif
#if defined(NLMSGERR_ATTR_COOKIE) || (defined(HAVE_DECL_NLMSGERR_ATTR_COOKIE) && HAVE_DECL_NLMSGERR_ATTR_COOKIE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NLMSGERR_ATTR_COOKIE) == (3), "NLMSGERR_ATTR_COOKIE != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NLMSGERR_ATTR_COOKIE 3
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat nlmsgerr_attrs in mpers mode

# else

static
const struct xlat nlmsgerr_attrs[] = {
 XLAT(NLMSGERR_ATTR_UNUSED),
 XLAT(NLMSGERR_ATTR_MSG),
 XLAT(NLMSGERR_ATTR_OFFS),
 XLAT(NLMSGERR_ATTR_COOKIE),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
