chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sd-network: IPv4 link-local support [v2]
[elogind.git]
/
src
/
network
/
networkd-address.c
diff --git
a/src/network/networkd-address.c
b/src/network/networkd-address.c
index edae62c802cc6b5b64aecc96d40950bc7d7698a7..c92418967b48ec5185d878b4631e9fb65083f6da 100644
(file)
--- 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;
return -ENOMEM;
address->family = AF_UNSPEC;
+ address->scope = RT_SCOPE_UNIVERSE;
address->network = network;
address->network = network;
@@
-71,6
+72,7
@@
int address_new_dynamic(Address **ret) {
return -ENOMEM;
address->family = AF_UNSPEC;
return -ENOMEM;
address->family = AF_UNSPEC;
+ address->scope = RT_SCOPE_UNIVERSE;
*ret = address;
address = NULL;
*ret = address;
address = NULL;
@@
-105,7
+107,8
@@
int address_drop(Address *address, Link *link,
assert(link->manager);
assert(link->manager->rtnl);
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));
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);
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));
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;
}
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;
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 (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,
r = net_parse_inaddr(address, &n->family, &n->broadcast);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, EINVAL,