git: af9756602988 - main - net/bird2: Update to 2.0.11 and add netlink flavor

From: Olivier Cochard <olivier_at_FreeBSD.org>
Date: Thu, 15 Dec 2022 18:01:15 UTC
The branch main has been updated by olivier:

URL: https://cgit.FreeBSD.org/ports/commit/?id=af97566029883a46fc4d58cf5e066f25cd075107

commit af97566029883a46fc4d58cf5e066f25cd075107
Author:     Olivier Cochard <olivier@FreeBSD.org>
AuthorDate: 2022-12-15 17:34:36 +0000
Commit:     Olivier Cochard <olivier@FreeBSD.org>
CommitDate: 2022-12-15 17:57:16 +0000

    net/bird2: Update to 2.0.11 and add netlink flavor
    
    The netlink flavor is experimental and available on current only.
    
    ChangeLog:      https://bird.network.cz/pipermail/bird-users/2022-December/016431.html
    
    Obtained from:  melifaro
    Differential Revision:  https://reviews.freebsd.org/D37588
---
 net/bird2/Makefile                           | 15 ++++++++-
 net/bird2/distinfo                           |  6 ++--
 net/bird2/files/extra-patch-netlink          | 31 ++++++++++++++++++
 net/bird2/files/patch-sysdep_bsd_sysio.h     | 48 ++++++++++++++++++++++++++++
 net/bird2/files/patch-sysdep_linux_netlink.c | 22 +++++++++++++
 5 files changed, 118 insertions(+), 4 deletions(-)

diff --git a/net/bird2/Makefile b/net/bird2/Makefile
index eabdf825eae6..9a23335cc348 100644
--- a/net/bird2/Makefile
+++ b/net/bird2/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	bird
-DISTVERSION=	2.0.10
+DISTVERSION=	2.0.11
 CATEGORIES=	net
 MASTER_SITES=	https://bird.network.cz/download/
 PKGNAMESUFFIX=	2
@@ -10,6 +10,9 @@ WWW=		https://bird.network.cz/
 
 LICENSE=	GPLv2
 
+FLAVORS=	base netlink
+netlink_PKGNAMESUFFIX=	2-netlink
+
 USES=		bison cpe gmake ncurses readline
 
 CONFLICTS=	bird
@@ -57,4 +60,14 @@ STATIC_VARS=	rt_prot+=static
 CONFIGURE_ARGS+=--with-protocols="${RT_PROT}"
 RPKI_LIB_DEPENDS=	libssh.so:security/libssh
 
+.include <bsd.port.options.mk>
+
+.if ${FLAVOR:U} == netlink
+CONFIGURE_ARGS+=--with-sysconfig=bsd-netlink
+EXTRA_PATCHES+=	${PATCHDIR}/extra-patch-netlink
+.if ${OSVERSION} < 1400073
+BROKEN=No netlink support
+.endif
+.endif
+
 .include <bsd.port.mk>
diff --git a/net/bird2/distinfo b/net/bird2/distinfo
index 8e0364275638..3b3692fdba36 100644
--- a/net/bird2/distinfo
+++ b/net/bird2/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1656504519
-SHA256 (bird-2.0.10.tar.gz) = 7ed341ddd8dc87fa9736586b3515447a8436fec442d65f4022155ab9de1ffd5a
-SIZE (bird-2.0.10.tar.gz) = 1276546
+TIMESTAMP = 1670848920
+SHA256 (bird-2.0.11.tar.gz) = 60a7b83b67b9d089d2a745a11fddd12461f631abc7b645b6c085adf90b3f55d6
+SIZE (bird-2.0.11.tar.gz) = 1301502
diff --git a/net/bird2/files/extra-patch-netlink b/net/bird2/files/extra-patch-netlink
new file mode 100644
index 000000000000..fd58ddaed2b3
--- /dev/null
+++ b/net/bird2/files/extra-patch-netlink
@@ -0,0 +1,31 @@
+From d890c5cca7f6239ddd7ea605e45854658f50d39b Mon Sep 17 00:00:00 2001
+From: Alexander Chernikov <melifaro@FreeBSD.org>
+Date: Tue, 13 Sep 2022 12:08:58 +0000
+Subject: [PATCH 1/1] FreeBSD: add netlink support
+
+Netlink can be enabled by picking new sysconfig target:
+./configure --with-sysconfig=bsd-netlink
+---
+ sysdep/bsd-netlink/Makefile |  9 +++++++++
+ sysdep/cf/bsd-netlink.h     | 34 ++++++++++++++++++++++++++++++++++
+ sysdep/cf/linux.h           |  2 ++
+ sysdep/linux/netlink.c      |  7 ++++++-
+ 4 files changed, 51 insertions(+), 1 deletion(-)
+ create mode 100644 sysdep/bsd-netlink/Makefile
+ create mode 100644 sysdep/cf/bsd-netlink.h
+
+diff --git sysdep/bsd-netlink/Makefile sysdep/bsd-netlink/Makefile
+new file mode 100644
+index 00000000..90b639a4
+--- /dev/null
++++ sysdep/bsd-netlink/Makefile
+@@ -0,0 +1,9 @@
++src := $(s)../linux/netlink.c
++obj := $(objdir)/sysdep/bsd-netlink/netlink.o
++$(obj): $(src)
++	$(E)echo CC -o $@ -c $<
++	$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
++$(all-daemon)
++$(conf-y-targets): $(s)../linux/netlink.Y
++
++tests_objs := $(tests_objs) $(obj)
diff --git a/net/bird2/files/patch-sysdep_bsd_sysio.h b/net/bird2/files/patch-sysdep_bsd_sysio.h
new file mode 100644
index 000000000000..2991c873126e
--- /dev/null
+++ b/net/bird2/files/patch-sysdep_bsd_sysio.h
@@ -0,0 +1,48 @@
+diff --git sysdep/bsd/sysio.h sysdep/bsd/sysio.h
+index f1887fb4..5167a5dd 100644
+--- sysdep/bsd/sysio.h
++++ sysdep/bsd/sysio.h
+@@ -48,11 +48,16 @@
+ static inline int
+ sk_setup_multicast4(sock *s)
+ {
+-  struct in_addr ifa = ip4_to_in4(s->iface->sysdep);
+   u8 ttl = s->ttl;
+   u8 n = 0;
+ 
+   /* This defines where should we send _outgoing_ multicasts */
++#ifdef __FreeBSD__
++  struct ip_mreqn ifa = { .imr_ifindex = s->iface->index };
++#else
++  struct in_addr ifa = ip4_to_in4(s->iface->sysdep);
++#endif
++
+   if (setsockopt(s->fd, IPPROTO_IP, IP_MULTICAST_IF, &ifa, sizeof(ifa)) < 0)
+     ERR("IP_MULTICAST_IF");
+ 
+@@ -68,8 +73,11 @@ sk_setup_multicast4(sock *s)
+ static inline int
+ sk_join_group4(sock *s, ip_addr maddr)
+ {
++#ifdef __FreeBSD__
++  struct ip_mreqn mr = { .imr_multiaddr = ipa_to_in4(maddr), .imr_ifindex = s->iface->index };
++#else
+   struct ip_mreq mr = INIT_MREQ4(maddr, s->iface);
+-
++#endif
+   if (setsockopt(s->fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0)
+     ERR("IP_ADD_MEMBERSHIP");
+ 
+@@ -79,8 +87,11 @@ sk_join_group4(sock *s, ip_addr maddr)
+ static inline int
+ sk_leave_group4(sock *s, ip_addr maddr)
+ {
++#ifdef __FreeBSD__
++  struct ip_mreqn mr = { .imr_multiaddr = ipa_to_in4(maddr), .imr_ifindex = s->iface->index };
++#else
+   struct ip_mreq mr = INIT_MREQ4(maddr, s->iface);
+-
++#endif
+   if (setsockopt(s->fd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mr, sizeof(mr)) < 0)
+     ERR("IP_ADD_MEMBERSHIP");
+ 
diff --git a/net/bird2/files/patch-sysdep_linux_netlink.c b/net/bird2/files/patch-sysdep_linux_netlink.c
new file mode 100644
index 000000000000..b84707c46be2
--- /dev/null
+++ b/net/bird2/files/patch-sysdep_linux_netlink.c
@@ -0,0 +1,22 @@
+--- sysdep/linux/netlink.c.orig	2022-12-15 15:03:21 UTC
++++ sysdep/linux/netlink.c
+@@ -27,15 +27,15 @@
+ #include "lib/hash.h"
+ #include "conf/conf.h"
+ 
++#ifdef CONFIG_FREEBSD_NETLINK
++#include <netlink/netlink.h>
++#include <netlink/netlink_route.h>
++#endif
+ #ifdef CONFIG_LINUX_NETLINK
+ #include <asm/types.h>
+ #include <linux/if.h>
+ #include <linux/netlink.h>
+ #include <linux/rtnetlink.h>
+-#endif
+-#ifdef CONFIG_FREEBSD_NETLINK
+-#include <netlink/netlink.h>
+-#include <netlink/netlink_route.h>
+ #endif
+ 
+ #ifdef HAVE_MPLS_KERNEL