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

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

#if defined(IPV4_DEVCONF_FORWARDING) || (defined(HAVE_DECL_IPV4_DEVCONF_FORWARDING) && HAVE_DECL_IPV4_DEVCONF_FORWARDING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_FORWARDING) == (1), "IPV4_DEVCONF_FORWARDING != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_FORWARDING 1
#endif
#if defined(IPV4_DEVCONF_MC_FORWARDING) || (defined(HAVE_DECL_IPV4_DEVCONF_MC_FORWARDING) && HAVE_DECL_IPV4_DEVCONF_MC_FORWARDING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_MC_FORWARDING) == (2), "IPV4_DEVCONF_MC_FORWARDING != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_MC_FORWARDING 2
#endif
#if defined(IPV4_DEVCONF_PROXY_ARP) || (defined(HAVE_DECL_IPV4_DEVCONF_PROXY_ARP) && HAVE_DECL_IPV4_DEVCONF_PROXY_ARP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_PROXY_ARP) == (3), "IPV4_DEVCONF_PROXY_ARP != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_PROXY_ARP 3
#endif
#if defined(IPV4_DEVCONF_ACCEPT_REDIRECTS) || (defined(HAVE_DECL_IPV4_DEVCONF_ACCEPT_REDIRECTS) && HAVE_DECL_IPV4_DEVCONF_ACCEPT_REDIRECTS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ACCEPT_REDIRECTS) == (4), "IPV4_DEVCONF_ACCEPT_REDIRECTS != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ACCEPT_REDIRECTS 4
#endif
#if defined(IPV4_DEVCONF_SECURE_REDIRECTS) || (defined(HAVE_DECL_IPV4_DEVCONF_SECURE_REDIRECTS) && HAVE_DECL_IPV4_DEVCONF_SECURE_REDIRECTS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_SECURE_REDIRECTS) == (5), "IPV4_DEVCONF_SECURE_REDIRECTS != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_SECURE_REDIRECTS 5
#endif
#if defined(IPV4_DEVCONF_SEND_REDIRECTS) || (defined(HAVE_DECL_IPV4_DEVCONF_SEND_REDIRECTS) && HAVE_DECL_IPV4_DEVCONF_SEND_REDIRECTS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_SEND_REDIRECTS) == (6), "IPV4_DEVCONF_SEND_REDIRECTS != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_SEND_REDIRECTS 6
#endif
#if defined(IPV4_DEVCONF_SHARED_MEDIA) || (defined(HAVE_DECL_IPV4_DEVCONF_SHARED_MEDIA) && HAVE_DECL_IPV4_DEVCONF_SHARED_MEDIA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_SHARED_MEDIA) == (7), "IPV4_DEVCONF_SHARED_MEDIA != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_SHARED_MEDIA 7
#endif
#if defined(IPV4_DEVCONF_RP_FILTER) || (defined(HAVE_DECL_IPV4_DEVCONF_RP_FILTER) && HAVE_DECL_IPV4_DEVCONF_RP_FILTER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_RP_FILTER) == (8), "IPV4_DEVCONF_RP_FILTER != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_RP_FILTER 8
#endif
#if defined(IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE) || (defined(HAVE_DECL_IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE) && HAVE_DECL_IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE) == (9), "IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE 9
#endif
#if defined(IPV4_DEVCONF_BOOTP_RELAY) || (defined(HAVE_DECL_IPV4_DEVCONF_BOOTP_RELAY) && HAVE_DECL_IPV4_DEVCONF_BOOTP_RELAY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_BOOTP_RELAY) == (10), "IPV4_DEVCONF_BOOTP_RELAY != 10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_BOOTP_RELAY 10
#endif
#if defined(IPV4_DEVCONF_LOG_MARTIANS) || (defined(HAVE_DECL_IPV4_DEVCONF_LOG_MARTIANS) && HAVE_DECL_IPV4_DEVCONF_LOG_MARTIANS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_LOG_MARTIANS) == (11), "IPV4_DEVCONF_LOG_MARTIANS != 11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_LOG_MARTIANS 11
#endif
#if defined(IPV4_DEVCONF_TAG) || (defined(HAVE_DECL_IPV4_DEVCONF_TAG) && HAVE_DECL_IPV4_DEVCONF_TAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_TAG) == (12), "IPV4_DEVCONF_TAG != 12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_TAG 12
#endif
#if defined(IPV4_DEVCONF_ARPFILTER) || (defined(HAVE_DECL_IPV4_DEVCONF_ARPFILTER) && HAVE_DECL_IPV4_DEVCONF_ARPFILTER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ARPFILTER) == (13), "IPV4_DEVCONF_ARPFILTER != 13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ARPFILTER 13
#endif
#if defined(IPV4_DEVCONF_MEDIUM_ID) || (defined(HAVE_DECL_IPV4_DEVCONF_MEDIUM_ID) && HAVE_DECL_IPV4_DEVCONF_MEDIUM_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_MEDIUM_ID) == (14), "IPV4_DEVCONF_MEDIUM_ID != 14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_MEDIUM_ID 14
#endif
#if defined(IPV4_DEVCONF_NOXFRM) || (defined(HAVE_DECL_IPV4_DEVCONF_NOXFRM) && HAVE_DECL_IPV4_DEVCONF_NOXFRM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_NOXFRM) == (15), "IPV4_DEVCONF_NOXFRM != 15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_NOXFRM 15
#endif
#if defined(IPV4_DEVCONF_NOPOLICY) || (defined(HAVE_DECL_IPV4_DEVCONF_NOPOLICY) && HAVE_DECL_IPV4_DEVCONF_NOPOLICY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_NOPOLICY) == (16), "IPV4_DEVCONF_NOPOLICY != 16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_NOPOLICY 16
#endif
#if defined(IPV4_DEVCONF_FORCE_IGMP_VERSION) || (defined(HAVE_DECL_IPV4_DEVCONF_FORCE_IGMP_VERSION) && HAVE_DECL_IPV4_DEVCONF_FORCE_IGMP_VERSION)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_FORCE_IGMP_VERSION) == (17), "IPV4_DEVCONF_FORCE_IGMP_VERSION != 17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_FORCE_IGMP_VERSION 17
#endif
#if defined(IPV4_DEVCONF_ARP_ANNOUNCE) || (defined(HAVE_DECL_IPV4_DEVCONF_ARP_ANNOUNCE) && HAVE_DECL_IPV4_DEVCONF_ARP_ANNOUNCE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ARP_ANNOUNCE) == (18), "IPV4_DEVCONF_ARP_ANNOUNCE != 18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ARP_ANNOUNCE 18
#endif
#if defined(IPV4_DEVCONF_ARP_IGNORE) || (defined(HAVE_DECL_IPV4_DEVCONF_ARP_IGNORE) && HAVE_DECL_IPV4_DEVCONF_ARP_IGNORE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ARP_IGNORE) == (19), "IPV4_DEVCONF_ARP_IGNORE != 19");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ARP_IGNORE 19
#endif
#if defined(IPV4_DEVCONF_PROMOTE_SECONDARIES) || (defined(HAVE_DECL_IPV4_DEVCONF_PROMOTE_SECONDARIES) && HAVE_DECL_IPV4_DEVCONF_PROMOTE_SECONDARIES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_PROMOTE_SECONDARIES) == (20), "IPV4_DEVCONF_PROMOTE_SECONDARIES != 20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_PROMOTE_SECONDARIES 20
#endif
#if defined(IPV4_DEVCONF_ARP_ACCEPT) || (defined(HAVE_DECL_IPV4_DEVCONF_ARP_ACCEPT) && HAVE_DECL_IPV4_DEVCONF_ARP_ACCEPT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ARP_ACCEPT) == (21), "IPV4_DEVCONF_ARP_ACCEPT != 21");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ARP_ACCEPT 21
#endif
#if defined(IPV4_DEVCONF_ARP_NOTIFY) || (defined(HAVE_DECL_IPV4_DEVCONF_ARP_NOTIFY) && HAVE_DECL_IPV4_DEVCONF_ARP_NOTIFY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ARP_NOTIFY) == (22), "IPV4_DEVCONF_ARP_NOTIFY != 22");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ARP_NOTIFY 22
#endif
#if defined(IPV4_DEVCONF_ACCEPT_LOCAL) || (defined(HAVE_DECL_IPV4_DEVCONF_ACCEPT_LOCAL) && HAVE_DECL_IPV4_DEVCONF_ACCEPT_LOCAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ACCEPT_LOCAL) == (23), "IPV4_DEVCONF_ACCEPT_LOCAL != 23");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ACCEPT_LOCAL 23
#endif
#if defined(IPV4_DEVCONF_SRC_VMARK) || (defined(HAVE_DECL_IPV4_DEVCONF_SRC_VMARK) && HAVE_DECL_IPV4_DEVCONF_SRC_VMARK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_SRC_VMARK) == (24), "IPV4_DEVCONF_SRC_VMARK != 24");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_SRC_VMARK 24
#endif
#if defined(IPV4_DEVCONF_PROXY_ARP_PVLAN) || (defined(HAVE_DECL_IPV4_DEVCONF_PROXY_ARP_PVLAN) && HAVE_DECL_IPV4_DEVCONF_PROXY_ARP_PVLAN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_PROXY_ARP_PVLAN) == (25), "IPV4_DEVCONF_PROXY_ARP_PVLAN != 25");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_PROXY_ARP_PVLAN 25
#endif
#if defined(IPV4_DEVCONF_ROUTE_LOCALNET) || (defined(HAVE_DECL_IPV4_DEVCONF_ROUTE_LOCALNET) && HAVE_DECL_IPV4_DEVCONF_ROUTE_LOCALNET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_ROUTE_LOCALNET) == (26), "IPV4_DEVCONF_ROUTE_LOCALNET != 26");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_ROUTE_LOCALNET 26
#endif
#if defined(IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL) || (defined(HAVE_DECL_IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL) && HAVE_DECL_IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL) == (27), "IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL != 27");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL 27
#endif
#if defined(IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL) || (defined(HAVE_DECL_IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL) && HAVE_DECL_IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL) == (28), "IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL != 28");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL 28
#endif
#if defined(IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) || (defined(HAVE_DECL_IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) && HAVE_DECL_IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN) == (29), "IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN != 29");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN 29
#endif
#if defined(IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) || (defined(HAVE_DECL_IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) && HAVE_DECL_IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST) == (30), "IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST != 30");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST 30
#endif
#if defined(IPV4_DEVCONF_DROP_GRATUITOUS_ARP) || (defined(HAVE_DECL_IPV4_DEVCONF_DROP_GRATUITOUS_ARP) && HAVE_DECL_IPV4_DEVCONF_DROP_GRATUITOUS_ARP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_DROP_GRATUITOUS_ARP) == (31), "IPV4_DEVCONF_DROP_GRATUITOUS_ARP != 31");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_DROP_GRATUITOUS_ARP 31
#endif
#if defined(IPV4_DEVCONF_BC_FORWARDING) || (defined(HAVE_DECL_IPV4_DEVCONF_BC_FORWARDING) && HAVE_DECL_IPV4_DEVCONF_BC_FORWARDING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IPV4_DEVCONF_BC_FORWARDING) == (32), "IPV4_DEVCONF_BC_FORWARDING != 32");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IPV4_DEVCONF_BC_FORWARDING 32
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat inet_devconf_indices in mpers mode

# else

static
const struct xlat inet_devconf_indices[] = {

 [IPV4_DEVCONF_FORWARDING-1] = XLAT(IPV4_DEVCONF_FORWARDING-1),
 [IPV4_DEVCONF_MC_FORWARDING-1] = XLAT(IPV4_DEVCONF_MC_FORWARDING-1),
 [IPV4_DEVCONF_PROXY_ARP-1] = XLAT(IPV4_DEVCONF_PROXY_ARP-1),
 [IPV4_DEVCONF_ACCEPT_REDIRECTS-1] = XLAT(IPV4_DEVCONF_ACCEPT_REDIRECTS-1),
 [IPV4_DEVCONF_SECURE_REDIRECTS-1] = XLAT(IPV4_DEVCONF_SECURE_REDIRECTS-1),
 [IPV4_DEVCONF_SEND_REDIRECTS-1] = XLAT(IPV4_DEVCONF_SEND_REDIRECTS-1),
 [IPV4_DEVCONF_SHARED_MEDIA-1] = XLAT(IPV4_DEVCONF_SHARED_MEDIA-1),
 [IPV4_DEVCONF_RP_FILTER-1] = XLAT(IPV4_DEVCONF_RP_FILTER-1),
 [IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE-1] = XLAT(IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE-1),
 [IPV4_DEVCONF_BOOTP_RELAY-1] = XLAT(IPV4_DEVCONF_BOOTP_RELAY-1),
 [IPV4_DEVCONF_LOG_MARTIANS-1] = XLAT(IPV4_DEVCONF_LOG_MARTIANS-1),
 [IPV4_DEVCONF_TAG-1] = XLAT(IPV4_DEVCONF_TAG-1),
 [IPV4_DEVCONF_ARPFILTER-1] = XLAT(IPV4_DEVCONF_ARPFILTER-1),
 [IPV4_DEVCONF_MEDIUM_ID-1] = XLAT(IPV4_DEVCONF_MEDIUM_ID-1),
 [IPV4_DEVCONF_NOXFRM-1] = XLAT(IPV4_DEVCONF_NOXFRM-1),
 [IPV4_DEVCONF_NOPOLICY-1] = XLAT(IPV4_DEVCONF_NOPOLICY-1),
 [IPV4_DEVCONF_FORCE_IGMP_VERSION-1] = XLAT(IPV4_DEVCONF_FORCE_IGMP_VERSION-1),
 [IPV4_DEVCONF_ARP_ANNOUNCE-1] = XLAT(IPV4_DEVCONF_ARP_ANNOUNCE-1),
 [IPV4_DEVCONF_ARP_IGNORE-1] = XLAT(IPV4_DEVCONF_ARP_IGNORE-1),
 [IPV4_DEVCONF_PROMOTE_SECONDARIES-1] = XLAT(IPV4_DEVCONF_PROMOTE_SECONDARIES-1),
 [IPV4_DEVCONF_ARP_ACCEPT-1] = XLAT(IPV4_DEVCONF_ARP_ACCEPT-1),
 [IPV4_DEVCONF_ARP_NOTIFY-1] = XLAT(IPV4_DEVCONF_ARP_NOTIFY-1),
 [IPV4_DEVCONF_ACCEPT_LOCAL-1] = XLAT(IPV4_DEVCONF_ACCEPT_LOCAL-1),
 [IPV4_DEVCONF_SRC_VMARK-1] = XLAT(IPV4_DEVCONF_SRC_VMARK-1),
 [IPV4_DEVCONF_PROXY_ARP_PVLAN-1] = XLAT(IPV4_DEVCONF_PROXY_ARP_PVLAN-1),
 [IPV4_DEVCONF_ROUTE_LOCALNET-1] = XLAT(IPV4_DEVCONF_ROUTE_LOCALNET-1),
 [IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL-1] = XLAT(IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL-1),
 [IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL-1] = XLAT(IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL-1),
 [IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN-1] = XLAT(IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN-1),
 [IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST-1] = XLAT(IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST-1),
 [IPV4_DEVCONF_DROP_GRATUITOUS_ARP-1] = XLAT(IPV4_DEVCONF_DROP_GRATUITOUS_ARP-1),
 [IPV4_DEVCONF_BC_FORWARDING-1] = XLAT(IPV4_DEVCONF_BC_FORWARDING-1),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
