All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 4/4] icmp6: Respect the on-link bit in RA prefixes
@ 2022-01-03 14:18 Andrew Zaborowski
  0 siblings, 0 replies; only message in thread
From: Andrew Zaborowski @ 2022-01-03 14:18 UTC (permalink / raw)
  To: ell

[-- Attachment #1: Type: text/plain, Size: 2086 bytes --]

When the on-link bit is not 1 in a prefix option, the packets addressed
to that prefix should go through the router who sent the RA.
---
 ell/icmp6-private.h | 1 +
 ell/icmp6.c         | 9 +++++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/ell/icmp6-private.h b/ell/icmp6-private.h
index 3846bad..38d640f 100644
--- a/ell/icmp6-private.h
+++ b/ell/icmp6-private.h
@@ -23,6 +23,7 @@
 struct route_info {
 	uint8_t address[16];
 	uint8_t prefix_len;
+	bool onlink : 1;
 	uint8_t preference;
 	uint32_t preferred_lifetime;
 	uint32_t valid_lifetime;
diff --git a/ell/icmp6.c b/ell/icmp6.c
index 93c1701..197aa4a 100644
--- a/ell/icmp6.c
+++ b/ell/icmp6.c
@@ -285,11 +285,11 @@ static void icmp6_client_setup_routes(struct l_icmp6_client *client)
 {
 	struct l_icmp6_router *ra = client->ra;
 	struct l_rtnl_route *rt;
-	char buf[INET6_ADDRSTRLEN];
+	char gw_buf[INET6_ADDRSTRLEN];
 	unsigned int i;
 
 	rt = l_rtnl_route_new_gateway(inet_ntop(AF_INET6, ra->address,
-							buf, sizeof(buf)));
+						gw_buf, sizeof(gw_buf)));
 	if (!rt) {
 		CLIENT_DEBUG("Unable to parse RA 'from' address");
 		return;
@@ -308,6 +308,7 @@ static void icmp6_client_setup_routes(struct l_icmp6_client *client)
 
 	for (i = 0; i < ra->n_prefixes; i++) {
 		struct route_info *info = &ra->prefixes[i];
+		char buf[INET6_ADDRSTRLEN];
 
 		if (info->valid_lifetime == 0)
 			continue;
@@ -319,6 +320,9 @@ static void icmp6_client_setup_routes(struct l_icmp6_client *client)
 		if (!rt)
 			continue;
 
+		if (!info->onlink)
+			l_rtnl_route_set_gateway(rt, gw_buf);
+
 		l_rtnl_route_set_preference(rt, info->preference);
 		l_rtnl_route_set_protocol(rt, RTPROT_RA);
 		l_rtnl_route_set_mtu(rt, ra->mtu);
@@ -729,6 +733,7 @@ struct l_icmp6_router *_icmp6_router_parse(const struct nd_router_advert *ra,
 				break;
 
 			i->prefix_len = opts[2];
+			i->onlink = opts[3] & 1;
 			i->valid_lifetime = l_get_be32(opts + 4);
 			i->preferred_lifetime = l_get_be32(opts + 8);
 			memcpy(i->address, opts + 16, 16);
-- 
2.32.0

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-01-03 14:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-03 14:18 [PATCH 4/4] icmp6: Respect the on-link bit in RA prefixes Andrew Zaborowski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.