Skip to content

Commit

Permalink
net/bird2: Update to 2.0.11 and add netlink flavor
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ocochard committed Dec 15, 2022
1 parent e2b9724 commit af97566
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 4 deletions.
15 changes: 14 additions & 1 deletion 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
Expand All @@ -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
Expand Down Expand Up @@ -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>
6 changes: 3 additions & 3 deletions 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
31 changes: 31 additions & 0 deletions 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)
48 changes: 48 additions & 0 deletions 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");

22 changes: 22 additions & 0 deletions 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

0 comments on commit af97566

Please sign in to comment.