X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-address.c;h=0e582d626cebad8e2cbf6ab39e40bdc90d4ae1c6;hb=71a6151083d842b2f5bf04e50239f0bf85d34d2e;hp=75a9bae20197a411e735371b43aa6778d15bc641;hpb=8cd11a0f0f4ca05199e1166f6a07472b296f7455;p=elogind.git diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index 75a9bae20..0e582d626 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -55,10 +55,13 @@ void address_free(Address *address) { free(address); } -int address_configure(Manager *manager, Address *address, Link *link) { +int address_configure(Address *address, Link *link, + sd_rtnl_message_handler_t callback) { _cleanup_sd_rtnl_message_unref_ sd_rtnl_message *req = NULL; int r; + assert(link->manager); + r = sd_rtnl_message_addr_new(RTM_NEWADDR, link->ifindex, address->family, address->prefixlen, IFA_F_PERMANENT, RT_SCOPE_UNIVERSE, &req); @@ -97,13 +100,13 @@ int address_configure(Manager *manager, Address *address, Link *link) { } } - r = sd_rtnl_call(manager->rtnl, req, 0, NULL); + r = sd_rtnl_call_async(link->manager->rtnl, req, callback, link, 0, NULL); if (r < 0) { - log_error("Could not configure address: %s", strerror(-r)); - return r != -EEXIST ? r : 0; + log_error("Could not send rtnetlink message: %s", strerror(-r)); + return r; } - log_info("Configured interface address"); + link->rtnl_messages ++; return 0; } @@ -112,6 +115,7 @@ int config_parse_address(const char *unit, const char *filename, unsigned line, const char *section, + unsigned section_line, const char *lvalue, int ltype, const char *rvalue,