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

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

#if defined(AF_UNSPEC) || (defined(HAVE_DECL_AF_UNSPEC) && HAVE_DECL_AF_UNSPEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_UNSPEC) == (0), "AF_UNSPEC != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_UNSPEC 0
#endif
#if defined(AF_UNIX) || (defined(HAVE_DECL_AF_UNIX) && HAVE_DECL_AF_UNIX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_UNIX) == (1), "AF_UNIX != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_UNIX 1
#endif
#if defined(AF_INET) || (defined(HAVE_DECL_AF_INET) && HAVE_DECL_AF_INET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_INET) == (2), "AF_INET != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_INET 2
#endif
#if defined(AF_AX25) || (defined(HAVE_DECL_AF_AX25) && HAVE_DECL_AF_AX25)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_AX25) == (3), "AF_AX25 != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_AX25 3
#endif
#if defined(AF_IPX) || (defined(HAVE_DECL_AF_IPX) && HAVE_DECL_AF_IPX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_IPX) == (4), "AF_IPX != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_IPX 4
#endif
#if defined(AF_APPLETALK) || (defined(HAVE_DECL_AF_APPLETALK) && HAVE_DECL_AF_APPLETALK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_APPLETALK) == (5), "AF_APPLETALK != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_APPLETALK 5
#endif
#if defined(AF_NETROM) || (defined(HAVE_DECL_AF_NETROM) && HAVE_DECL_AF_NETROM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_NETROM) == (6), "AF_NETROM != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_NETROM 6
#endif
#if defined(AF_BRIDGE) || (defined(HAVE_DECL_AF_BRIDGE) && HAVE_DECL_AF_BRIDGE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_BRIDGE) == (7), "AF_BRIDGE != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_BRIDGE 7
#endif
#if defined(AF_ATMPVC) || (defined(HAVE_DECL_AF_ATMPVC) && HAVE_DECL_AF_ATMPVC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_ATMPVC) == (8), "AF_ATMPVC != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_ATMPVC 8
#endif
#if defined(AF_X25) || (defined(HAVE_DECL_AF_X25) && HAVE_DECL_AF_X25)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_X25) == (9), "AF_X25 != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_X25 9
#endif
#if defined(AF_INET6) || (defined(HAVE_DECL_AF_INET6) && HAVE_DECL_AF_INET6)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_INET6) == (10), "AF_INET6 != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_INET6 10
#endif
#if defined(AF_ROSE) || (defined(HAVE_DECL_AF_ROSE) && HAVE_DECL_AF_ROSE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_ROSE) == (11), "AF_ROSE != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_ROSE 11
#endif
#if defined(AF_DECnet) || (defined(HAVE_DECL_AF_DECnet) && HAVE_DECL_AF_DECnet)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_DECnet) == (12), "AF_DECnet != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_DECnet 12
#endif
#if defined(AF_NETBEUI) || (defined(HAVE_DECL_AF_NETBEUI) && HAVE_DECL_AF_NETBEUI)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_NETBEUI) == (13), "AF_NETBEUI != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_NETBEUI 13
#endif
#if defined(AF_SECURITY) || (defined(HAVE_DECL_AF_SECURITY) && HAVE_DECL_AF_SECURITY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_SECURITY) == (14), "AF_SECURITY != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_SECURITY 14
#endif
#if defined(AF_KEY) || (defined(HAVE_DECL_AF_KEY) && HAVE_DECL_AF_KEY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_KEY) == (15), "AF_KEY != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_KEY 15
#endif
#if defined(AF_NETLINK) || (defined(HAVE_DECL_AF_NETLINK) && HAVE_DECL_AF_NETLINK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_NETLINK) == (16), "AF_NETLINK != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_NETLINK 16
#endif
#if defined(AF_PACKET) || (defined(HAVE_DECL_AF_PACKET) && HAVE_DECL_AF_PACKET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_PACKET) == (17), "AF_PACKET != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_PACKET 17
#endif
#if defined(AF_ASH) || (defined(HAVE_DECL_AF_ASH) && HAVE_DECL_AF_ASH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_ASH) == (18), "AF_ASH != 18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_ASH 18
#endif
#if defined(AF_ECONET) || (defined(HAVE_DECL_AF_ECONET) && HAVE_DECL_AF_ECONET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_ECONET) == (19), "AF_ECONET != 19");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_ECONET 19
#endif
#if defined(AF_ATMSVC) || (defined(HAVE_DECL_AF_ATMSVC) && HAVE_DECL_AF_ATMSVC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_ATMSVC) == (20), "AF_ATMSVC != 20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_ATMSVC 20
#endif
#if defined(AF_RDS) || (defined(HAVE_DECL_AF_RDS) && HAVE_DECL_AF_RDS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_RDS) == (21), "AF_RDS != 21");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_RDS 21
#endif
#if defined(AF_SNA) || (defined(HAVE_DECL_AF_SNA) && HAVE_DECL_AF_SNA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_SNA) == (22), "AF_SNA != 22");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_SNA 22
#endif
#if defined(AF_IRDA) || (defined(HAVE_DECL_AF_IRDA) && HAVE_DECL_AF_IRDA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_IRDA) == (23), "AF_IRDA != 23");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_IRDA 23
#endif
#if defined(AF_PPPOX) || (defined(HAVE_DECL_AF_PPPOX) && HAVE_DECL_AF_PPPOX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_PPPOX) == (24), "AF_PPPOX != 24");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_PPPOX 24
#endif
#if defined(AF_WANPIPE) || (defined(HAVE_DECL_AF_WANPIPE) && HAVE_DECL_AF_WANPIPE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_WANPIPE) == (25), "AF_WANPIPE != 25");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_WANPIPE 25
#endif
#if defined(AF_LLC) || (defined(HAVE_DECL_AF_LLC) && HAVE_DECL_AF_LLC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_LLC) == (26), "AF_LLC != 26");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_LLC 26
#endif
#if defined(AF_IB) || (defined(HAVE_DECL_AF_IB) && HAVE_DECL_AF_IB)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_IB) == (27), "AF_IB != 27");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_IB 27
#endif
#if defined(AF_MPLS) || (defined(HAVE_DECL_AF_MPLS) && HAVE_DECL_AF_MPLS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_MPLS) == (28), "AF_MPLS != 28");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_MPLS 28
#endif
#if defined(AF_CAN) || (defined(HAVE_DECL_AF_CAN) && HAVE_DECL_AF_CAN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_CAN) == (29), "AF_CAN != 29");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_CAN 29
#endif
#if defined(AF_TIPC) || (defined(HAVE_DECL_AF_TIPC) && HAVE_DECL_AF_TIPC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_TIPC) == (30), "AF_TIPC != 30");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_TIPC 30
#endif
#if defined(AF_BLUETOOTH) || (defined(HAVE_DECL_AF_BLUETOOTH) && HAVE_DECL_AF_BLUETOOTH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_BLUETOOTH) == (31), "AF_BLUETOOTH != 31");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_BLUETOOTH 31
#endif
#if defined(AF_IUCV) || (defined(HAVE_DECL_AF_IUCV) && HAVE_DECL_AF_IUCV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_IUCV) == (32), "AF_IUCV != 32");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_IUCV 32
#endif
#if defined(AF_RXRPC) || (defined(HAVE_DECL_AF_RXRPC) && HAVE_DECL_AF_RXRPC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_RXRPC) == (33), "AF_RXRPC != 33");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_RXRPC 33
#endif
#if defined(AF_ISDN) || (defined(HAVE_DECL_AF_ISDN) && HAVE_DECL_AF_ISDN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_ISDN) == (34), "AF_ISDN != 34");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_ISDN 34
#endif
#if defined(AF_PHONET) || (defined(HAVE_DECL_AF_PHONET) && HAVE_DECL_AF_PHONET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_PHONET) == (35), "AF_PHONET != 35");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_PHONET 35
#endif
#if defined(AF_IEEE802154) || (defined(HAVE_DECL_AF_IEEE802154) && HAVE_DECL_AF_IEEE802154)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_IEEE802154) == (36), "AF_IEEE802154 != 36");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_IEEE802154 36
#endif
#if defined(AF_CAIF) || (defined(HAVE_DECL_AF_CAIF) && HAVE_DECL_AF_CAIF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_CAIF) == (37), "AF_CAIF != 37");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_CAIF 37
#endif
#if defined(AF_ALG) || (defined(HAVE_DECL_AF_ALG) && HAVE_DECL_AF_ALG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_ALG) == (38), "AF_ALG != 38");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_ALG 38
#endif
#if defined(AF_NFC) || (defined(HAVE_DECL_AF_NFC) && HAVE_DECL_AF_NFC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_NFC) == (39), "AF_NFC != 39");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_NFC 39
#endif
#if defined(AF_VSOCK) || (defined(HAVE_DECL_AF_VSOCK) && HAVE_DECL_AF_VSOCK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_VSOCK) == (40), "AF_VSOCK != 40");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_VSOCK 40
#endif
#if defined(AF_KCM) || (defined(HAVE_DECL_AF_KCM) && HAVE_DECL_AF_KCM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_KCM) == (41), "AF_KCM != 41");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_KCM 41
#endif
#if defined(AF_QIPCRTR) || (defined(HAVE_DECL_AF_QIPCRTR) && HAVE_DECL_AF_QIPCRTR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_QIPCRTR) == (42), "AF_QIPCRTR != 42");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_QIPCRTR 42
#endif
#if defined(AF_SMC) || (defined(HAVE_DECL_AF_SMC) && HAVE_DECL_AF_SMC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_SMC) == (43), "AF_SMC != 43");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_SMC 43
#endif
#if defined(AF_XDP) || (defined(HAVE_DECL_AF_XDP) && HAVE_DECL_AF_XDP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((AF_XDP) == (44), "AF_XDP != 44");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define AF_XDP 44
#endif

#ifndef XLAT_MACROS_ONLY

# ifndef IN_MPERS

const struct xlat addrfams[] = {
 [AF_UNSPEC] = XLAT(AF_UNSPEC),
 [AF_UNIX] = XLAT(AF_UNIX),
 [AF_INET] = XLAT(AF_INET),
 [AF_AX25] = XLAT(AF_AX25),
 [AF_IPX] = XLAT(AF_IPX),
 [AF_APPLETALK] = XLAT(AF_APPLETALK),
 [AF_NETROM] = XLAT(AF_NETROM),
 [AF_BRIDGE] = XLAT(AF_BRIDGE),
 [AF_ATMPVC] = XLAT(AF_ATMPVC),
 [AF_X25] = XLAT(AF_X25),
 [AF_INET6] = XLAT(AF_INET6),
 [AF_ROSE] = XLAT(AF_ROSE),
 [AF_DECnet] = XLAT(AF_DECnet),
 [AF_NETBEUI] = XLAT(AF_NETBEUI),
 [AF_SECURITY] = XLAT(AF_SECURITY),
 [AF_KEY] = XLAT(AF_KEY),
 [AF_NETLINK] = XLAT(AF_NETLINK),
 [AF_PACKET] = XLAT(AF_PACKET),
 [AF_ASH] = XLAT(AF_ASH),
 [AF_ECONET] = XLAT(AF_ECONET),
 [AF_ATMSVC] = XLAT(AF_ATMSVC),
 [AF_RDS] = XLAT(AF_RDS),
 [AF_SNA] = XLAT(AF_SNA),
 [AF_IRDA] = XLAT(AF_IRDA),
 [AF_PPPOX] = XLAT(AF_PPPOX),
 [AF_WANPIPE] = XLAT(AF_WANPIPE),
 [AF_LLC] = XLAT(AF_LLC),
 [AF_IB] = XLAT(AF_IB),
 [AF_MPLS] = XLAT(AF_MPLS),
 [AF_CAN] = XLAT(AF_CAN),
 [AF_TIPC] = XLAT(AF_TIPC),
 [AF_BLUETOOTH] = XLAT(AF_BLUETOOTH),
 [AF_IUCV] = XLAT(AF_IUCV),
 [AF_RXRPC] = XLAT(AF_RXRPC),
 [AF_ISDN] = XLAT(AF_ISDN),
 [AF_PHONET] = XLAT(AF_PHONET),
 [AF_IEEE802154] = XLAT(AF_IEEE802154),
 [AF_CAIF] = XLAT(AF_CAIF),
 [AF_ALG] = XLAT(AF_ALG),
 [AF_NFC] = XLAT(AF_NFC),
 [AF_VSOCK] = XLAT(AF_VSOCK),
 [AF_KCM] = XLAT(AF_KCM),
 [AF_QIPCRTR] = XLAT(AF_QIPCRTR),
 [AF_SMC] = XLAT(AF_SMC),
 [AF_XDP] = XLAT(AF_XDP),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
