[PATCH] IPv4 over IPv6 nexthop support on FreeBSD
Marek Zarychta
zarychtam at plan-b.pwste.edu.pl
Mon Apr 17 17:12:40 CEST 2023
W dniu 17.04.2023 o 16:46, Luiz Amaral pisze:
> Hello Ondrej,
>
> Did you have a chance to check out the patch? I am happy to adjust it
> if needed.
Hello Luiz,
have you tried netlink flavour of BIRD ? It requires FreeBSD 13.2, but
should work out of the box in such a setup, I have not tested though.
Marek
>
> Luiz
>
> On 20/02/2023 04.33, Ondrej Zajicek wrote:
>> On Sat, Feb 18, 2023 at 03:41:31PM +0100, Luiz Amaral wrote:
>>> Hello,
>>>
>>> While experimenting in FreeBSD 13.1 with IPv4 over IPv6 nexthop
>>> routes, I
>>> realized that BIRD was unable to read routes from the kernel as well as
>>> export routes to the kernel. The support for it was implemented in
>>> FreeBSD
>>> 13.1 [1].
>>>
>>> I have attached a patch that made it work for me on FreeBSD 13.1, both
>>> importing and exporting to/from kernel. I believe the patch will
>>> still need
>>> some work, as from a quick look, OpenBSD still has no support for
>>> it. I'm
>>> happy to implement any suggested improvements and send a v2 of it.
>> Hello
>>
>> This looks particularly simple. Will check that.
>>
>>> [1] https://reviews.freebsd.org/D30398
>>> diff --git a/sysdep/bsd/krt-sock.c b/sysdep/bsd/krt-sock.c
>>> index 1f793293..92f8c837 100644
>>> --- a/sysdep/bsd/krt-sock.c
>>> +++ b/sysdep/bsd/krt-sock.c
>>> @@ -314,6 +314,10 @@ krt_send_route(struct krt_proto *p, int cmd,
>>> rte *e)
>>> if (ipa_is_link_local(gw))
>>> _I0(gw) = 0xfe800000 | (i->index & 0x0000ffff);
>>> + if (ipa_is_ip6(gw)) {
>>> + af = AF_INET6;
>>> + }
>>> +
>>> sockaddr_fill(&gate, af, gw, NULL, 0);
>>> msg.rtm.rtm_flags |= RTF_GATEWAY;
>>> msg.rtm.rtm_addrs |= RTA_GATEWAY;
>>> @@ -469,7 +473,7 @@ krt_read_route(struct ks_msg *msg, struct
>>> krt_proto *p, int scan)
>>> idst = ipa_from_sa(&dst);
>>> imask = ipa_from_sa(&mask);
>>> - igate = (gate.sa.sa_family == dst.sa.sa_family) ?
>>> ipa_from_sa(&gate) : IPA_NONE;
>>> + igate = ipa_from_sa(&gate);
>>> #ifdef KRT_SHARED_SOCKET
>>> if (!scan)
>>
>
--
Marek Zarychta
More information about the Bird-users
mailing list