[PATCH] BSD: macOS Support

Zhang Maiyun me at maiyun.me
Wed Mar 13 19:28:06 CET 2024


Hi Tom and Maria,

I’ve managed to put together a macOS runner. It is functioning, although the script is a bit messy.
https://github.com/myzhang1029/bird/blob/master/.github/workflows/ci.yml

About testing on a Darwin kernel, I am not sure if that would be enough, because making bird compile on a Mac is also related to how Apple chooses to name constants like TCPOPT_SIGNATURE in the vendored header files.

Kind regards,
Maiyun Zhang (he/him)

> Le 13 mars 2024 à 06:27, Tom Herbers <bird at tomherbers.de> a écrit :
> 
> Hi,
> 
> GitHub offers free macOS Runners via GitHub Actions for all public
> repositories [1].
> 
> That would be a legal of testing on macOS.
> 
> Now, of course, someone would have to put together a suitable workflow.
> 
> 
> Kind regards,
> Tom
> 
> 
> [1]
> https://docs.github.com/de/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories
> 
> Am Mittwoch, dem 13.03.2024 um 11:11 +0100 schrieb Maria Matejka via
> Bird-users:
>>  
>> Hello Zhang,
>>  
>> thank you for your contribution. This looks includable, however I'd
>> like to ask you about maintainability of this patch. It may quite
>> quickly rot away. Is there an easy (and legal) way to have automatic
>> macOS build and basic run testing, without a need to maintain a
>> physical Mac?
>>  
>>  
>> Thanks,
>>  Maria
>>  
>>  
>> On 2024-03-13 03:02, Zhang Maiyun via Bird-users wrote:
>>  
>>  
>>>  
>>> 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
>>>  
>>>  
>>  
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20240313/5ed10282/attachment.htm>


More information about the Bird-users mailing list