- r = sd_rtnl_message_close_container(req);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not close IFLA_LINKINFO container %s",
- strerror(-r));
- return r;
- }
-
- if (link)
- r = sd_rtnl_call_async(netdev->manager->rtnl, req, callback, link, 0, NULL);
- else
- r = sd_rtnl_call_async(netdev->manager->rtnl, req, &netdev_create_handler, netdev, 0, NULL);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not send rtnetlink message: %s", strerror(-r));
- return r;
- }
-
- log_debug_netdev(netdev, "creating netdev");
-
- netdev->state = NETDEV_STATE_CREATING;
-
- return 0;
-}
-
-int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
- if (netdev->kind == NETDEV_KIND_VLAN || netdev->kind == NETDEV_KIND_MACVLAN)
- return netdev_create(netdev, link, callback);
-
- if (netdev->state == NETDEV_STATE_READY) {
- netdev_enslave_ready(netdev, link, callback);
- } else {
- /* the netdev is not yet read, save this request for when it is*/
- netdev_enslave_callback *cb;
-
- cb = new0(netdev_enslave_callback, 1);
- if (!cb)
- return log_oom();
-
- cb->callback = callback;
- cb->link = link;
-
- LIST_PREPEND(callbacks, netdev->callbacks, cb);
- }