From: Yu Watanabe Date: Mon, 28 Oct 2024 15:28:30 +0000 (+0900) Subject: network/tunnel: merge dhcp4_pd_create_6rd_tunnel_message() into dhcp4_pd_create_6rd_t... X-Git-Tag: v257-rc1~90^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dc3dfb72c8fa19b5ae26ceae5669e3c801adb9fa;p=thirdparty%2Fsystemd.git network/tunnel: merge dhcp4_pd_create_6rd_tunnel_message() into dhcp4_pd_create_6rd_tunnel() No functional change, just refactoring and preparation for later commits. --- diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c index 2bf58086b2f..0299aef9eb8 100644 --- a/src/network/netdev/tunnel.c +++ b/src/network/netdev/tunnel.c @@ -86,15 +86,32 @@ int dhcp4_pd_create_6rd_tunnel_name(Link *link, char **ret) { return 0; } -static int dhcp4_pd_create_6rd_tunnel_message( - Link *link, - sd_netlink_message *m, - const struct in_addr *ipv4address, - uint8_t ipv4masklen, - const struct in6_addr *sixrd_prefix, - uint8_t sixrd_prefixlen) { +int dhcp4_pd_create_6rd_tunnel(Link *link, link_netlink_message_handler_t callback) { + _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL; + uint8_t ipv4masklen, sixrd_prefixlen; + struct in_addr ipv4address; + struct in6_addr sixrd_prefix; int r; + assert(link); + assert(link->manager); + assert(link->manager->rtnl); + assert(link->dhcp_lease); + assert(link->dhcp4_6rd_tunnel_name); + assert(callback); + + r = sd_dhcp_lease_get_address(link->dhcp_lease, &ipv4address); + if (r < 0) + return r; + + r = sd_dhcp_lease_get_6rd(link->dhcp_lease, &ipv4masklen, &sixrd_prefixlen, &sixrd_prefix, NULL, NULL); + if (r < 0) + return r; + + r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_NEWLINK, 0); + if (r < 0) + return r; + r = sd_netlink_message_append_string(m, IFLA_IFNAME, link->dhcp4_6rd_tunnel_name); if (r < 0) return r; @@ -107,7 +124,7 @@ static int dhcp4_pd_create_6rd_tunnel_message( if (r < 0) return r; - r = sd_netlink_message_append_in_addr(m, IFLA_IPTUN_LOCAL, ipv4address); + r = sd_netlink_message_append_in_addr(m, IFLA_IPTUN_LOCAL, &ipv4address); if (r < 0) return r; @@ -115,7 +132,7 @@ static int dhcp4_pd_create_6rd_tunnel_message( if (r < 0) return r; - r = sd_netlink_message_append_in6_addr(m, IFLA_IPTUN_6RD_PREFIX, sixrd_prefix); + r = sd_netlink_message_append_in6_addr(m, IFLA_IPTUN_6RD_PREFIX, &sixrd_prefix); if (r < 0) return r; @@ -123,7 +140,7 @@ static int dhcp4_pd_create_6rd_tunnel_message( if (r < 0) return r; - struct in_addr relay_prefix = *ipv4address; + struct in_addr relay_prefix = ipv4address; (void) in4_addr_mask(&relay_prefix, ipv4masklen); r = sd_netlink_message_append_u32(m, IFLA_IPTUN_6RD_RELAY_PREFIX, relay_prefix.s_addr); if (r < 0) @@ -141,45 +158,10 @@ static int dhcp4_pd_create_6rd_tunnel_message( if (r < 0) return r; - return 0; -} - -int dhcp4_pd_create_6rd_tunnel(Link *link, link_netlink_message_handler_t callback) { - _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL; - uint8_t ipv4masklen, sixrd_prefixlen; - struct in_addr ipv4address; - struct in6_addr sixrd_prefix; - int r; - - assert(link); - assert(link->ifindex > 0); - assert(link->manager); - assert(link->dhcp_lease); - assert(link->dhcp4_6rd_tunnel_name); - assert(callback); - - r = sd_dhcp_lease_get_address(link->dhcp_lease, &ipv4address); - if (r < 0) - return log_link_debug_errno(link, r, "Failed to get DHCPv4 address: %m"); - - r = sd_dhcp_lease_get_6rd(link->dhcp_lease, &ipv4masklen, &sixrd_prefixlen, &sixrd_prefix, NULL, NULL); - if (r < 0) - return log_link_debug_errno(link, r, "Failed to get 6rd option: %m"); - - r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_NEWLINK, 0); - if (r < 0) - return log_link_debug_errno(link, r, "Failed to create netlink message: %m"); - - r = dhcp4_pd_create_6rd_tunnel_message(link, m, - &ipv4address, ipv4masklen, - &sixrd_prefix, sixrd_prefixlen); - if (r < 0) - return log_link_debug_errno(link, r, "Failed to fill netlink message: %m"); - r = netlink_call_async(link->manager->rtnl, NULL, m, callback, link_netlink_destroy_callback, link); if (r < 0) - return log_link_debug_errno(link, r, "Could not send netlink message: %m"); + return r; link_ref(link); diff --git a/src/network/networkd-dhcp-prefix-delegation.c b/src/network/networkd-dhcp-prefix-delegation.c index 56555df62c7..2864c52488c 100644 --- a/src/network/networkd-dhcp-prefix-delegation.c +++ b/src/network/networkd-dhcp-prefix-delegation.c @@ -1030,7 +1030,7 @@ int dhcp4_pd_prefix_acquired(Link *uplink) { if (link_get_by_name(uplink->manager, uplink->dhcp4_6rd_tunnel_name, NULL) < 0) { r = dhcp4_pd_create_6rd_tunnel(uplink, dhcp4_pd_6rd_tunnel_create_handler); if (r < 0) - return r; + return log_link_warning_errno(uplink, r, "Failed to create 6rd SIT tunnel: %m"); } /* Then, assign subnet prefixes to downstream interfaces. */