X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-address.c;h=c92418967b48ec5185d878b4631e9fb65083f6da;hb=5c1d3fc93d91384bbac29adf01074fa4375317ea;hp=edae62c802cc6b5b64aecc96d40950bc7d7698a7;hpb=d595c5cc9e894c3608ed634052b0ba93aa94bf2f;p=elogind.git diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index edae62c80..c92418967 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -47,6 +47,7 @@ int address_new_static(Network *network, unsigned section, Address **ret) { return -ENOMEM; address->family = AF_UNSPEC; + address->scope = RT_SCOPE_UNIVERSE; address->network = network; @@ -71,6 +72,7 @@ int address_new_dynamic(Address **ret) { return -ENOMEM; address->family = AF_UNSPEC; + address->scope = RT_SCOPE_UNIVERSE; *ret = address; address = NULL; @@ -105,7 +107,8 @@ int address_drop(Address *address, Link *link, assert(link->manager); assert(link->manager->rtnl); - r = sd_rtnl_message_new_addr(RTM_DELADDR, link->ifindex, address->family, &req); + r = sd_rtnl_message_new_addr(link->manager->rtnl, &req, RTM_DELADDR, + link->ifindex, address->family); if (r < 0) { log_error("Could not allocate RTM_DELADDR message: %s", strerror(-r)); @@ -149,8 +152,8 @@ int address_configure(Address *address, Link *link, assert(link->manager); assert(link->manager->rtnl); - r = sd_rtnl_message_new_addr(RTM_NEWADDR, link->ifindex, - address->family, &req); + r = sd_rtnl_message_new_addr(link->manager->rtnl, &req, RTM_NEWADDR, + link->ifindex, address->family); if (r < 0) { log_error("Could not allocate RTM_NEWADDR message: %s", strerror(-r)); @@ -169,7 +172,7 @@ int address_configure(Address *address, Link *link, return r; } - r = sd_rtnl_message_addr_set_scope(req, RT_SCOPE_UNIVERSE); + r = sd_rtnl_message_addr_set_scope(req, address->scope); if (r < 0) { log_error("Could not set scope: %s", strerror(-r)); return r; @@ -274,6 +277,13 @@ int config_parse_broadcast(const char *unit, if (r < 0) return r; + if (n->family == AF_INET6) { + log_syntax(unit, LOG_ERR, filename, line, EINVAL, + "Broadcast is not valid for IPv6 addresses, " + "ignoring assignment: %s", address); + return 0; + } + r = net_parse_inaddr(address, &n->family, &n->broadcast); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL,