#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stddef.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#ifdef HAVE_STROPTS_H
#include <stropts.h>
#endif /* HAVE_STROPTS_H */
-#include <sys/fcntl.h>
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif /* HAVE_SYS_SELECT_H */
#include <sys/sockio.h>
#endif /* HAVE_SYS_SOCKIO_H */
+#ifdef __APPLE__
+#define __APPLE_USE_RFC_3542
+#endif
+
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif /* HAVE_NETINET_IN_H */
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <linux/filter.h>
-#include <stddef.h>
#else
#define RT_TABLE_MAIN 0
#endif /* HAVE_NETLINK */
*/
#if defined(__NetBSD__) || defined(__FreeBSD__) \
|| (defined(__OpenBSD__) && (OpenBSD < 200311)) \
+ || (defined(__APPLE__)) \
|| (defined(SUNOS_5) && defined(WORDS_BIGENDIAN))
#define HAVE_IP_HDRINCL_BSD_ORDER
#endif
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
+#define ZEBRA_NUM_OF(x) (sizeof (x) / sizeof (x[0]))
+
/* For old definition. */
#ifndef IN6_ARE_ADDR_EQUAL
#define IN6_ARE_ADDR_EQUAL IN6_IS_ADDR_EQUAL
#define ZEBRA_ROUTER_ID_DELETE 21
#define ZEBRA_ROUTER_ID_UPDATE 22
#define ZEBRA_HELLO 23
-#define ZEBRA_MESSAGE_MAX 24
+#define ZEBRA_NEXTHOP_REGISTER 24
+#define ZEBRA_NEXTHOP_UNREGISTER 25
+#define ZEBRA_NEXTHOP_UPDATE 26
+#define ZEBRA_INTERFACE_NBR_ADDRESS_ADD 27
+#define ZEBRA_INTERFACE_NBR_ADDRESS_DELETE 28
+#define ZEBRA_INTERFACE_BFD_DEST_DOWN 29
+#define ZEBRA_IMPORT_ROUTE_REGISTER 30
+#define ZEBRA_IMPORT_ROUTE_UNREGISTER 31
+#define ZEBRA_IMPORT_CHECK_UPDATE 32
+#define ZEBRA_MESSAGE_MAX 33
/* Marker value used in new Zserv, in the byte location corresponding
* the command value in the old zserv header. To allow old and new
#define ZEBRA_FLAG_CHANGED 0x20
#define ZEBRA_FLAG_STATIC 0x40
#define ZEBRA_FLAG_REJECT 0x80
+#define ZEBRA_FLAG_SCOPE_LINK 0x100
/* Zebra nexthop flags. */
#define ZEBRA_NEXTHOP_IFINDEX 1
#define ZEBRA_NEXTHOP_IPV6_IFINDEX 7
#define ZEBRA_NEXTHOP_IPV6_IFNAME 8
#define ZEBRA_NEXTHOP_BLACKHOLE 9
+#define ZEBRA_NEXTHOP_IPV4_ONLINK 10
#ifndef INADDR_LOOPBACK
#define INADDR_LOOPBACK 0x7f000001 /* Internet address 127.0.0.1. */
#define ZEBRA_ISIS_DISTANCE_DEFAULT 115
#define ZEBRA_IBGP_DISTANCE_DEFAULT 200
#define ZEBRA_EBGP_DISTANCE_DEFAULT 20
+#define ZEBRA_TABLE_DISTANCE_DEFAULT 150
/* Flag manipulation macros. */
#define CHECK_FLAG(V,F) ((V) & (F))
#define SET_FLAG(V,F) (V) |= (F)
#define UNSET_FLAG(V,F) (V) &= ~(F)
+#define RESET_FLAG(V) (V) = 0
/* AFI and SAFI type. */
typedef u_int16_t afi_t;