From e1cb65bb8aa896fa960cd4195038415d7911716e Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 21 Apr 2024 17:33:05 +0000 Subject: [PATCH] Pass advertising router to the kernel. We are using the ifra_dstaddr for this because it will always be unused with autoconf addresses since they can't be used on P2P links. OK bluhm --- sbin/slaacd/engine.c | 3 ++- sbin/slaacd/engine.h | 3 ++- sbin/slaacd/slaacd.c | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sbin/slaacd/engine.c b/sbin/slaacd/engine.c index 000a9fcf413..bb10368527b 100644 --- a/sbin/slaacd/engine.c +++ b/sbin/slaacd/engine.c @@ -1,4 +1,4 @@ -/* $OpenBSD: engine.c,v 1.88 2024/02/11 21:29:12 bluhm Exp $ */ +/* $OpenBSD: engine.c,v 1.89 2024/04/21 17:33:05 florian Exp $ */ /* * Copyright (c) 2017 Florian Obser @@ -2130,6 +2130,7 @@ configure_address(struct address_proposal *addr_proposal) address.if_index = addr_proposal->if_index; memcpy(&address.addr, &addr_proposal->addr, sizeof(address.addr)); + memcpy(&address.gw, &addr_proposal->from, sizeof(address.gw)); memcpy(&address.mask, &addr_proposal->mask, sizeof(address.mask)); address.vltime = addr_proposal->vltime; address.pltime = addr_proposal->pltime; diff --git a/sbin/slaacd/engine.h b/sbin/slaacd/engine.h index 7a8551d2c50..cf439884927 100644 --- a/sbin/slaacd/engine.h +++ b/sbin/slaacd/engine.h @@ -1,4 +1,4 @@ -/* $OpenBSD: engine.h,v 1.6 2021/03/21 18:25:24 florian Exp $ */ +/* $OpenBSD: engine.h,v 1.7 2024/04/21 17:33:05 florian Exp $ */ /* * Copyright (c) 2004, 2005 Esben Norby @@ -19,6 +19,7 @@ struct imsg_configure_address { uint32_t if_index; struct sockaddr_in6 addr; + struct sockaddr_in6 gw; struct in6_addr mask; uint32_t vltime; uint32_t pltime; diff --git a/sbin/slaacd/slaacd.c b/sbin/slaacd/slaacd.c index 4d1786361f7..05af06e68de 100644 --- a/sbin/slaacd/slaacd.c +++ b/sbin/slaacd/slaacd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: slaacd.c,v 1.68 2023/02/15 13:47:00 florian Exp $ */ +/* $OpenBSD: slaacd.c,v 1.69 2024/04/21 17:33:05 florian Exp $ */ /* * Copyright (c) 2017 Florian Obser @@ -632,6 +632,8 @@ configure_interface(struct imsg_configure_address *address) memcpy(&in6_addreq.ifra_addr, &address->addr, sizeof(in6_addreq.ifra_addr)); + memcpy(&in6_addreq.ifra_dstaddr, &address->gw, + sizeof(in6_addreq.ifra_dstaddr)); memcpy(&in6_addreq.ifra_prefixmask.sin6_addr, &address->mask, sizeof(in6_addreq.ifra_prefixmask.sin6_addr)); in6_addreq.ifra_prefixmask.sin6_family = AF_INET6; -- 2.20.1