[PATCH] BSD: macOS Support
Zhang Maiyun
me at maiyun.me
Wed Mar 13 03:02:43 CET 2024
Dear all,
This patch makes bird build and run on macOS with `sysconfig=bsd`.
It is mainly modifying preprocessor directives.
I have tested it on macOS 14.3.1 and it is able to establish BGP sessions
and at least exchange IPv4 routes.
Kind regards,
Maiyun Zhang
Signed-off-by: Zhang Maiyun <me at maiyun.me>
---
sysdep/bsd/krt-sock.c | 6 ++++++
sysdep/bsd/sysio.h | 6 +++++-
sysdep/unix/io.c | 3 +++
sysdep/unix/random.c | 2 +-
4 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/sysdep/bsd/krt-sock.c b/sysdep/bsd/krt-sock.c
index d13e20a3..afb66cb3 100644
--- a/sysdep/bsd/krt-sock.c
+++ b/sysdep/bsd/krt-sock.c
@@ -635,6 +635,7 @@ krt_read_route(struct ks_msg *msg, struct krt_proto *p, int scan)
krt_got_route_async(p, e, new, src);
}
+#ifndef __APPLE__
static void
krt_read_ifannounce(struct ks_msg *msg)
{
@@ -661,6 +662,7 @@ krt_read_ifannounce(struct ks_msg *msg)
DBG("KRT: IFANNOUNCE what: %d index %d name %s\n", ifam->ifan_what, ifam->ifan_index, ifam->ifan_name);
}
+#endif
static void
krt_read_ifinfo(struct ks_msg *msg, int scan)
@@ -725,7 +727,9 @@ krt_read_ifinfo(struct ks_msg *msg, int scan)
if (fl & IFF_UP)
f.flags |= IF_ADMIN_UP;
+#ifndef __APPLE__
if (ifm->ifm_data.ifi_link_state != LINK_STATE_DOWN)
+#endif
f.flags |= IF_LINK_UP; /* up or unknown */
if (fl & IFF_LOOPBACK) /* Loopback */
f.flags |= IF_MULTIACCESS | IF_LOOPBACK | IF_IGNORE;
@@ -873,9 +877,11 @@ krt_read_msg(struct proto *p, struct ks_msg *msg, int scan)
case RTM_CHANGE:
krt_read_route(msg, (struct krt_proto *)p, scan);
break;
+#ifndef __APPLE__
case RTM_IFANNOUNCE:
krt_read_ifannounce(msg);
break;
+#endif
case RTM_IFINFO:
krt_read_ifinfo(msg, scan);
break;
diff --git a/sysdep/bsd/sysio.h b/sysdep/bsd/sysio.h
index b6b42b1e..85081c07 100644
--- a/sysdep/bsd/sysio.h
+++ b/sysdep/bsd/sysio.h
@@ -32,7 +32,7 @@
#endif
-#ifdef __NetBSD__
+#if defined(__NetBSD__) || defined(__APPLE__)
#ifndef IP_RECVTTL
#define IP_RECVTTL 23
@@ -49,6 +49,10 @@
#define TCP_MD5SIG TCP_SIGNATURE_ENABLE
#endif
+#ifdef __APPLE__
+#define TCP_MD5SIG TCPOPT_SIGNATURE
+#endif
+
#undef SA_LEN
#define SA_LEN(x) (x).sa.sa_len
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c
index 9b499020..81e09888 100644
--- a/sysdep/unix/io.c
+++ b/sysdep/unix/io.c
@@ -12,6 +12,9 @@
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
+#ifdef __APPLE__
+#define __APPLE_USE_RFC_3542
+#endif
#include <stdio.h>
#include <stdlib.h>
diff --git a/sysdep/unix/random.c b/sysdep/unix/random.c
index 4e64e56b..7d68c482 100644
--- a/sysdep/unix/random.c
+++ b/sysdep/unix/random.c
@@ -16,7 +16,7 @@
#include "sysdep/config.h"
#include "nest/bird.h"
-#ifdef HAVE_GETRANDOM
+#if defined(HAVE_GETRANDOM) || (defined(__APPLE__) && defined(HAVE_GETENTROPY))
#include <sys/random.h>
#endif
--
2.44.0
More information about the Bird-users
mailing list