From 852bf93826b151be8b85d894071d95eb3b0d4498 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 11 Oct 2022 16:19:12 +0900 Subject: [PATCH 1/2] sd-ndisc: ignore failure in sending solicitation Even if a bonding master interface has carrier, the underlying slave interfaces may not. In such a case, sending solicitation fails with -ENOBUS. Here, let's unconditionally ignore errors, as anyway we will send a solicitation later. Fixes #24717. --- src/libsystemd-network/sd-ndisc.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/libsystemd-network/sd-ndisc.c b/src/libsystemd-network/sd-ndisc.c index 276370ef05..2cf0cebdeb 100644 --- a/src/libsystemd-network/sd-ndisc.c +++ b/src/libsystemd-network/sd-ndisc.c @@ -286,13 +286,12 @@ static int ndisc_timeout(sd_event_source *s, uint64_t usec, void *userdata) { goto fail; r = icmp6_send_router_solicitation(nd->fd, &nd->mac_addr); - if (r < 0) { - log_ndisc_errno(nd, r, "Error sending Router Solicitation: %m"); - goto fail; - } - - log_ndisc(nd, "Sent Router Solicitation, next solicitation in %s", - FORMAT_TIMESPAN(nd->retransmit_time, USEC_PER_SEC)); + if (r < 0) + log_ndisc_errno(nd, r, "Failed to send Router Solicitation, next solicitation in %s, ignoring: %m", + FORMAT_TIMESPAN(nd->retransmit_time, USEC_PER_SEC)); + else + log_ndisc(nd, "Sent Router Solicitation, next solicitation in %s", + FORMAT_TIMESPAN(nd->retransmit_time, USEC_PER_SEC)); return 0; From abb977a61aebd88df573c692e3307bd31cfd6f1c Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 11 Oct 2022 16:22:35 +0900 Subject: [PATCH 2/2] sd-radv: mention that failures in sending RA are ignored --- src/libsystemd-network/sd-radv.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index 6611746a58..a3a5a21b3d 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -322,7 +322,7 @@ static int radv_timeout(sd_event_source *s, uint64_t usec, void *userdata) { r = radv_send(ra, NULL, ra->lifetime_usec); if (r < 0) - log_radv_errno(ra, r, "Unable to send Router Advertisement: %m"); + log_radv_errno(ra, r, "Unable to send Router Advertisement, ignoring: %m"); /* RFC 4861, Section 6.2.4, sending initial Router Advertisements */ if (ra->ra_sent < RADV_MAX_INITIAL_RTR_ADVERTISEMENTS) @@ -384,7 +384,7 @@ int sd_radv_stop(sd_radv *ra) { with zero lifetime */ r = radv_send(ra, NULL, 0); if (r < 0) - log_radv_errno(ra, r, "Unable to send last Router Advertisement with router lifetime set to zero: %m"); + log_radv_errno(ra, r, "Unable to send last Router Advertisement with router lifetime set to zero, ignoring: %m"); radv_reset(ra); ra->fd = safe_close(ra->fd); @@ -638,7 +638,7 @@ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p) { /* If RAs have already been sent, send an RA immediately to announce the newly-added prefix */ r = radv_send(ra, NULL, ra->lifetime_usec); if (r < 0) - log_radv_errno(ra, r, "Unable to send Router Advertisement for added prefix %s: %m", addr_p); + log_radv_errno(ra, r, "Unable to send Router Advertisement for added prefix %s, ignoring: %m", addr_p); else log_radv(ra, "Sent Router Advertisement for added/updated prefix %s.", addr_p); @@ -734,7 +734,7 @@ int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p) { /* If RAs have already been sent, send an RA immediately to announce the newly-added route prefix */ r = radv_send(ra, NULL, ra->lifetime_usec); if (r < 0) - log_radv_errno(ra, r, "Unable to send Router Advertisement for added route prefix %s: %m", + log_radv_errno(ra, r, "Unable to send Router Advertisement for added route prefix %s, ignoring: %m", strna(addr_p)); else log_radv(ra, "Sent Router Advertisement for added route prefix %s.", strna(addr_p));