diff --git a/36549.patch b/36549.patch new file mode 100644 index 0000000..2e07411 --- /dev/null +++ b/36549.patch @@ -0,0 +1,82 @@ +From 3ba72ff335eb25238bb4efb16435afe841724ef5 Mon Sep 17 00:00:00 2001 +From: Matteo Croce +Date: Thu, 27 Feb 2025 20:10:20 +0100 +Subject: [PATCH] add log messages when a route can't be updated + +--- + src/network/networkd-route.c | 46 ++++++++++++++++++++++++++++-------- + 1 file changed, 36 insertions(+), 10 deletions(-) + +diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c +index 9498fa4ccc8f2..91a3916c30a8d 100644 +--- a/src/network/networkd-route.c ++++ b/src/network/networkd-route.c +@@ -1399,32 +1399,58 @@ bool route_can_update(const Route *existing, const Route *requesting) { + assert(existing); + assert(requesting); + +- if (route_compare_func(existing, requesting) != 0) ++ if (route_compare_func(existing, requesting) != 0) { ++ log_route_debug(existing, "Cannot update route, as the existing route is different", existing->manager); + return false; ++ } + + switch (existing->family) { + case AF_INET: +- if (existing->nexthop.weight != requesting->nexthop.weight) ++ if (existing->nexthop.weight != requesting->nexthop.weight) { ++ log_debug("existing weight: %u, requesting weight: %u", ++ existing->nexthop.weight, requesting->nexthop.weight); + return false; ++ } + return true; + + case AF_INET6: +- if (existing->protocol != requesting->protocol) ++ if (existing->protocol != requesting->protocol) { ++ log_debug("existing protocol: %hhu, requesting protocol: %hhu", ++ existing->protocol, requesting->protocol); + return false; +- if (existing->type != requesting->type) ++ } ++ if (existing->type != requesting->type) { ++ log_debug("existing type: %hhu, requesting type: %hhu", ++ existing->type, requesting->type); + return false; +- if (existing->flags != requesting->flags) ++ } ++ if (existing->flags != requesting->flags) { ++ log_debug("existing flags: %x, requesting flags: %x", ++ existing->flags, requesting->flags); + return false; +- if (!in6_addr_equal(&existing->prefsrc.in6, &requesting->prefsrc.in6)) ++ } ++ if (!in6_addr_equal(&existing->prefsrc.in6, &requesting->prefsrc.in6)) { ++ log_route_debug(existing, "Cannot update route, as the preferred source is different", existing->manager); + return false; +- if (existing->pref != requesting->pref) ++ } ++ if (existing->pref != requesting->pref) { ++ log_debug("existing preference: %hhu, requesting preference: %hhu", ++ existing->pref, requesting->pref); + return false; +- if (existing->expiration_managed_by_kernel && requesting->lifetime_usec == USEC_INFINITY) ++ } ++ if (existing->expiration_managed_by_kernel && requesting->lifetime_usec == USEC_INFINITY) { ++ log_route_debug(existing, "Cannot update route, as the expiration is managed by the kernel and lifetime is infinite", existing->manager); + return false; /* We cannot disable expiration timer in the kernel. */ +- if (!route_metric_can_update(&existing->metric, &requesting->metric, existing->expiration_managed_by_kernel)) ++ } ++ if (!route_metric_can_update(&existing->metric, &requesting->metric, existing->expiration_managed_by_kernel)) { ++ log_route_debug(existing, "Cannot update route, as the metrics are different", existing->manager); + return false; +- if (existing->nexthop.weight != requesting->nexthop.weight) ++ } ++ if (existing->nexthop.weight != requesting->nexthop.weight) { ++ log_debug("existing weight: %u, requesting weight: %u", ++ existing->nexthop.weight, requesting->nexthop.weight); + return false; ++ } + return true; + + default: diff --git a/systemd.spec b/systemd.spec index 91b0abd..6eae34c 100644 --- a/systemd.spec +++ b/systemd.spec @@ -139,6 +139,8 @@ Patch: 0001-pam_systemd-Make-pam_systemd-256-backwards-compatibl.patch # Revert breaking changes to unstable systemd-networkd lldp interface Patch: https://github.com/systemd/systemd/pull/36050.patch +Patch: https://github.com/systemd/systemd/pull/36549.patch + %endif # bump networkd netlink timeout to infinity