return 0;
}
-int address_remove_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg) {
+static int address_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
int r;
assert(rtnl);
assert(m);
assert(link);
assert(link->address_remove_messages > 0);
- assert(error_msg);
link->address_remove_messages--;
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EADDRNOTAVAIL)
- log_link_message_warning_errno(link, m, r, error_msg);
+ log_link_message_warning_errno(link, m, r, "Could not drop address");
else if (r >= 0)
(void) manager_rtnl_process_address(rtnl, m, link->manager);
return 1;
}
-static int address_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
- return address_remove_handler_internal(rtnl, m, link, "Could not drop address");
-}
-
-int address_remove(
- const Address *address,
- Link *link,
- link_netlink_message_handler_t callback) {
-
+int address_remove(const Address *address, Link *link) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
int r;
return r;
r = netlink_call_async(link->manager->rtnl, NULL, req,
- callback ?: address_remove_handler,
+ address_remove_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
r = k;
}
} else {
- k = address_remove(address, link, NULL);
+ k = address_remove(address, link);
if (k < 0 && r >= 0)
r = k;
}
if (address->family == AF_INET6 && in6_addr_is_link_local(&address->in_addr.in6) == 1 && link_ipv6ll_enabled(link))
continue;
- k = address_remove(address, link, NULL);
+ k = address_remove(address, link);
if (k < 0 && r >= 0) {
r = k;
continue;
case SD_IPV4ACD_EVENT_CONFLICT:
log_link_warning(link, "DAD conflict. Dropping address "IPV4_ADDRESS_FMT_STR,
IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
- r = address_remove(address, link, NULL);
+ r = address_remove(address, link);
if (r < 0)
log_link_error_errno(link, r, "Failed to drop DAD conflicted address "IPV4_ADDRESS_FMT_STR,
IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
Address *address_free(Address *address);
int address_get(Link *link, const Address *in, Address **ret);
int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
-int address_remove_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
-int address_remove(const Address *address, Link *link, link_netlink_message_handler_t callback);
+int address_remove(const Address *address, Link *link);
bool address_equal(const Address *a1, const Address *a2);
bool address_is_ready(const Address *a);
void address_set_broadcast(Address *a);
log_link_debug(link, "Removing old DHCPv4 address and routes.");
SET_FOREACH(route, link->dhcp_routes_old) {
- k = route_remove(route, NULL, link, NULL);
+ k = route_remove(route, NULL, link);
if (k < 0)
r = k;
}
if (link->dhcp_address_old) {
- k = address_remove(link->dhcp_address_old, link, NULL);
+ k = address_remove(link->dhcp_address_old, link);
if (k < 0)
r = k;
}
assert(link);
SET_FOREACH(route, link->dhcp_routes) {
- k = route_remove(route, NULL, link, NULL);
+ k = route_remove(route, NULL, link);
if (k < 0)
r = k;
}
if (link->dhcp_address) {
- k = address_remove(link->dhcp_address, link, NULL);
+ k = address_remove(link->dhcp_address, link);
if (k < 0)
r = k;
}
if (link->dhcp_address_old &&
!address_equal(link->dhcp_address_old, link->dhcp_address)) {
/* Still too old address exists? Let's remove it immediately. */
- r = address_remove(link->dhcp_address_old, link, NULL);
+ r = address_remove(link->dhcp_address_old, link);
if (r < 0)
return r;
}
log_link_debug(link, "Removing old DHCPv6 Prefix Delegation addresses and routes.");
SET_FOREACH(route, link->dhcp6_pd_routes_old) {
- k = route_remove(route, NULL, link, NULL);
+ k = route_remove(route, NULL, link);
if (k < 0)
r = k;
}
SET_FOREACH(address, link->dhcp6_pd_addresses_old) {
- k = address_remove(address, link, NULL);
+ k = address_remove(address, link);
if (k < 0)
r = k;
}
log_link_debug(link, "Removing DHCPv6 Prefix Delegation addresses and routes.");
SET_FOREACH(route, link->dhcp6_pd_routes) {
- k = route_remove(route, NULL, link, NULL);
+ k = route_remove(route, NULL, link);
if (k < 0)
r = k;
}
SET_FOREACH(address, link->dhcp6_pd_addresses) {
- k = address_remove(address, link, NULL);
+ k = address_remove(address, link);
if (k < 0)
r = k;
}
log_link_debug(link, "Removing old DHCPv6 addresses and routes.");
SET_FOREACH(route, link->dhcp6_routes_old) {
- k = route_remove(route, NULL, link, NULL);
+ k = route_remove(route, NULL, link);
if (k < 0)
r = k;
}
SET_FOREACH(address, link->dhcp6_addresses_old) {
- k = address_remove(address, link, NULL);
+ k = address_remove(address, link);
if (k < 0)
r = k;
}
log_link_debug(link, "Removing DHCPv6 addresses and routes.");
SET_FOREACH(route, link->dhcp6_routes) {
- k = route_remove(route, NULL, link, NULL);
+ k = route_remove(route, NULL, link);
if (k < 0)
r = k;
}
SET_FOREACH(address, link->dhcp6_addresses) {
- k = address_remove(address, link, NULL);
+ k = address_remove(address, link);
if (k < 0)
r = k;
}
log_link_debug(link, "IPv4 link-local release "IPV4_ADDRESS_FMT_STR,
IPV4_ADDRESS_FMT_VAL(address->in_addr.in));
- return address_remove(address, link, NULL);
+ return address_remove(address, link);
}
static int ipv4ll_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
SET_FOREACH(na, link->ndisc_addresses)
if (na->marked && in6_addr_equal(&na->router, router)) {
- k = address_remove(na->address, link, NULL);
+ k = address_remove(na->address, link);
if (k < 0)
r = k;
}
SET_FOREACH(nr, link->ndisc_routes)
if (nr->marked && in6_addr_equal(&nr->router, router)) {
- k = route_remove(nr->route, NULL, link, NULL);
+ k = route_remove(nr->route, NULL, link);
if (k < 0)
r = k;
}
return 0;
}
-int link_route_remove_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg) {
+static int link_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
int r;
assert(m);
assert(link);
assert(link->route_remove_messages > 0);
- assert(error_msg);
link->route_remove_messages--;
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -ESRCH)
- log_link_message_warning_errno(link, m, r, error_msg);
+ log_link_message_warning_errno(link, m, r, "Could not drop route, ignoring");
return 1;
}
-static int link_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
- return link_route_remove_handler_internal(rtnl, m, link, "Could not drop route, ignoring");
-}
-
static int manager_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Manager *manager) {
int r;
return 1;
}
-int route_remove(
- const Route *route,
- Manager *manager,
- Link *link,
- link_netlink_message_handler_t callback) {
-
+int route_remove(const Route *route, Manager *manager, Link *link) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
unsigned char type;
int r;
if (link) {
r = netlink_call_async(manager->rtnl, NULL, req,
- callback ?: link_route_remove_handler,
+ link_route_remove_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
/* The existing links do not have the route. Let's drop this now. It may be
* re-configured later. */
- k = route_remove(route, manager, NULL, NULL);
+ k = route_remove(route, manager, NULL);
if (k < 0 && r >= 0)
r = k;
if (link_has_static_route(link, route))
k = route_add(NULL, link, route, NULL, NULL, NULL);
else
- k = route_remove(route, NULL, link, NULL);
+ k = route_remove(route, NULL, link);
if (k < 0 && r >= 0)
r = k;
}
if (route->protocol == RTPROT_KERNEL)
continue;
- k = route_remove(route, NULL, link, NULL);
+ k = route_remove(route, NULL, link);
if (k < 0 && r >= 0)
r = k;
}
assert(route);
- r = route_remove(route, route->manager, route->link, NULL);
+ r = route_remove(route, route->manager, route->link);
if (r < 0) {
log_link_warning_errno(route->link, r, "Could not remove route: %m");
route_free(route);
int route_dup(const Route *src, Route **ret);
int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
-int link_route_remove_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
-int route_remove(const Route *route, Manager *manager, Link *link, link_netlink_message_handler_t callback);
+int route_remove(const Route *route, Manager *manager, Link *link);
int link_has_route(Link *link, const Route *route);
bool manager_address_is_reachable(Manager *manager, int family, const union in_addr_union *address);