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

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

#if defined(NETNSA_NSID_NOT_ASSIGNED) || (defined(HAVE_DECL_NETNSA_NSID_NOT_ASSIGNED) && HAVE_DECL_NETNSA_NSID_NOT_ASSIGNED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETNSA_NSID_NOT_ASSIGNED) == (-1), "NETNSA_NSID_NOT_ASSIGNED != -1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETNSA_NSID_NOT_ASSIGNED -1
#endif
#if defined(NETNSA_NONE) || (defined(HAVE_DECL_NETNSA_NONE) && HAVE_DECL_NETNSA_NONE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETNSA_NONE) == (0), "NETNSA_NONE != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETNSA_NONE 0
#endif
#if defined(NETNSA_NSID) || (defined(HAVE_DECL_NETNSA_NSID) && HAVE_DECL_NETNSA_NSID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETNSA_NSID) == (1), "NETNSA_NSID != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETNSA_NSID 1
#endif
#if defined(NETNSA_PID) || (defined(HAVE_DECL_NETNSA_PID) && HAVE_DECL_NETNSA_PID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETNSA_PID) == (2), "NETNSA_PID != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETNSA_PID 2
#endif
#if defined(NETNSA_FD) || (defined(HAVE_DECL_NETNSA_FD) && HAVE_DECL_NETNSA_FD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((NETNSA_FD) == (3), "NETNSA_FD != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define NETNSA_FD 3
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat rtnl_nsid_attrs in mpers mode

# else

static
const struct xlat rtnl_nsid_attrs[] = {
 XLAT(NETNSA_NSID_NOT_ASSIGNED),
 XLAT(NETNSA_NONE),
 XLAT(NETNSA_NSID),
 XLAT(NETNSA_PID),
 XLAT(NETNSA_FD),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
