This should not change any behavior.
Just a preparation for a later commit which introduces
request_call_netlink_async().
return 0;
}
-static int stacked_netdev_create(NetDev *netdev, Link *link, link_netlink_message_handler_t callback) {
+static int stacked_netdev_create(NetDev *netdev, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(netdev);
assert(netdev->manager);
assert(link);
- assert(callback);
+ assert(req);
r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
if (r < 0)
if (r < 0)
return r;
- r = netlink_call_async(netdev->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(netdev->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
assert(req);
assert(req->type == REQUEST_TYPE_NETDEV_STACKED);
- assert(req->netlink_handler);
netdev = ASSERT_PTR(req->netdev);
link = ASSERT_PTR(req->link);
if (r <= 0)
return r;
- r = stacked_netdev_create(netdev, link, req->netlink_handler);
+ r = stacked_netdev_create(netdev, link, req);
if (r < 0)
return log_netdev_warning_errno(netdev, r, "Failed to create netdev: %m");
return 1;
}
-static int address_label_configure(AddressLabel *label, Link *link, link_netlink_message_handler_t callback) {
+static int address_label_configure(AddressLabel *label, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(link->ifindex > 0);
assert(link->manager);
assert(link->manager->rtnl);
- assert(callback);
+ assert(req);
r = sd_rtnl_message_new_addrlabel(link->manager->rtnl, &m, RTM_NEWADDRLABEL,
link->ifindex, AF_INET6);
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
if (!link_is_ready_to_configure(link, false))
return 0;
- r = address_label_configure(req->label, link, req->netlink_handler);
+ r = address_label_configure(req->label, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure address label: %m");
return 1;
}
-static int address_configure(
- const Address *address,
- Link *link,
- link_netlink_message_handler_t callback) {
-
+static int address_configure(const Address *address, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(link->ifindex > 0);
assert(link->manager);
assert(link->manager->rtnl);
- assert(callback);
+ assert(req);
log_address_debug(address, "Configuring", link);
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback, link_netlink_destroy_callback, link);
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler, link_netlink_destroy_callback, link);
if (r < 0)
return r;
if (!address_is_ready_to_configure(link, address))
return 0;
- r = address_configure(address, link, req->netlink_handler);
+ r = address_configure(address, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure address: %m");
return 0;
}
-static int bridge_fdb_configure(BridgeFDB *fdb, Link *link, link_netlink_message_handler_t callback) {
+static int bridge_fdb_configure(BridgeFDB *fdb, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(fdb);
assert(link);
assert(link->manager);
- assert(callback);
+ assert(req);
r = sd_rtnl_message_new_neigh(link->manager->rtnl, &m, RTM_NEWNEIGH, link->ifindex, AF_BRIDGE);
if (r < 0)
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
if (!bridge_fdb_is_ready_to_configure(fdb, link))
return 0;
- r = bridge_fdb_configure(fdb, link, req->netlink_handler);
+ r = bridge_fdb_configure(fdb, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure bridge FDB: %m");
}
/* send a request to the kernel to add an MDB entry */
-static int bridge_mdb_configure(BridgeMDB *mdb, Link *link, link_netlink_message_handler_t callback) {
+static int bridge_mdb_configure(BridgeMDB *mdb, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
struct br_mdb_entry entry;
int r;
assert(mdb);
assert(link);
assert(link->manager);
- assert(callback);
+ assert(req);
if (DEBUG_LOGGING) {
_cleanup_free_ char *a = NULL;
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
if (!bridge_mdb_is_ready_to_configure(link))
return 0;
- r = bridge_mdb_configure(req->mdb, link, req->netlink_handler);
+ r = bridge_mdb_configure(req->mdb, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure bridge MDB: %m");
}
/* send a request to the kernel to add an IPv6 Proxy entry to the neighbour table */
-static int ipv6_proxy_ndp_address_configure(
- const struct in6_addr *address,
- Link *link,
- link_netlink_message_handler_t callback) {
-
+static int ipv6_proxy_ndp_address_configure(const struct in6_addr *address, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(link);
assert(link->manager);
assert(link->manager->rtnl);
- assert(callback);
+ assert(req);
/* create new netlink message */
r = sd_rtnl_message_new_neigh(link->manager->rtnl, &m, RTM_NEWNEIGH, link->ifindex, AF_INET6);
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
if (!link_is_ready_to_configure(link, false))
return 0;
- r = ipv6_proxy_ndp_address_configure(req->ipv6_proxy_ndp, link, req->netlink_handler);
+ r = ipv6_proxy_ndp_address_configure(req->ipv6_proxy_ndp, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure IPv6 proxy NDP address: %m");
return 0;
}
-static int neighbor_configure(
- Neighbor *neighbor,
- Link *link,
- link_netlink_message_handler_t callback) {
-
+static int neighbor_configure(Neighbor *neighbor, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(link->ifindex > 0);
assert(link->manager);
assert(link->manager->rtnl);
- assert(callback);
+ assert(req);
log_neighbor_debug(neighbor, "Configuring", link);
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
if (!link_is_ready_to_configure(link, false))
return 0;
- r = neighbor_configure(neighbor, link, req->netlink_handler);
+ r = neighbor_configure(neighbor, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure neighbor: %m");
return 0;
}
-static int nexthop_configure(
- NextHop *nexthop,
- Link *link,
- link_netlink_message_handler_t callback) {
-
+static int nexthop_configure(NextHop *nexthop, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(link->manager);
assert(link->manager->rtnl);
assert(link->ifindex > 0);
- assert(callback);
+ assert(req);
log_nexthop_debug(nexthop, "Configuring", link);
}
}
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
if (!nexthop_is_ready_to_configure(link, nexthop))
return 0;
- r = nexthop_configure(nexthop, link, req->netlink_handler);
+ r = nexthop_configure(nexthop, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure nexthop");
return 1;
}
-static int route_configure(
- const Route *route,
- Link *link,
- link_netlink_message_handler_t callback) {
-
+static int route_configure(const Route *route, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(link->manager);
assert(link->manager->rtnl);
assert(link->ifindex > 0);
- assert(callback);
+ assert(req);
log_route_debug(route, "Configuring", link, link->manager);
return r;
}
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
}
}
- r = route_configure(route, link, req->netlink_handler);
+ r = route_configure(route, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure route: %m");
return 0;
}
-static int routing_policy_rule_configure(
- RoutingPolicyRule *rule,
- Link *link,
- link_netlink_message_handler_t callback) {
-
+static int routing_policy_rule_configure(RoutingPolicyRule *rule, Link *link, Request *req) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(link->ifindex > 0);
assert(link->manager);
assert(link->manager->rtnl);
- assert(callback);
+ assert(req);
log_routing_policy_rule_debug(rule, "Configuring", link, link->manager);
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
if (!link_is_ready_to_configure(link, false))
return 0;
- r = routing_policy_rule_configure(rule, link, req->netlink_handler);
+ r = routing_policy_rule_configure(rule, link, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to configure routing policy rule: %m");
return up ? "up" : "down";
}
-static int link_up_or_down(Link *link, bool up, link_netlink_message_handler_t callback) {
- _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+static int link_up_or_down(Link *link, bool up, Request *req) {
+ _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
int r;
assert(link);
assert(link->manager);
assert(link->manager->rtnl);
- assert(callback);
+ assert(req);
log_link_debug(link, "Bringing link %s", up_or_down(up));
- r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
+ r = sd_rtnl_message_new_link(link->manager->rtnl, &m, RTM_SETLINK, link->ifindex);
if (r < 0)
return r;
- r = sd_rtnl_message_link_set_flags(req, up ? IFF_UP : 0, IFF_UP);
+ r = sd_rtnl_message_link_set_flags(m, up ? IFF_UP : 0, IFF_UP);
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
+ r = netlink_call_async(link->manager->rtnl, NULL, m, req->netlink_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return r;
assert(req);
assert(req->link);
assert(req->type == REQUEST_TYPE_ACTIVATE_LINK);
- assert(req->netlink_handler);
link = req->link;
up = PTR_TO_INT(req->userdata);
if (!link_is_ready_to_activate(link))
return 0;
- r = link_up_or_down(link, up, req->netlink_handler);
+ r = link_up_or_down(link, up, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to activate link: %m");
if (!link_is_ready_to_bring_up_or_down(link, up))
return 0;
- r = link_up_or_down(link, up, req->netlink_handler);
+ r = link_up_or_down(link, up, req);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to bring link %s: %m", up_or_down(up));