if (address->family == AF_INET) {
struct in_addr broadcast;
- broadcast.s_addr = address->in_addr.in.s_addr |
- htonl(0xfffffffflu >> address->prefixlen);
+ broadcast.s_addr = address->in_addr.in.s_addr | address->netmask.s_addr;
r = sd_rtnl_message_append(req, IFA_BROADCAST, &broadcast);
if (r < 0) {
}
n->prefixlen = (unsigned char) i;
+ n->netmask.s_addr = htonl(0xfffffffflu >> n->prefixlen);
+
address = strndup(rvalue, e - rvalue);
if (!address)
return log_oom();
int link_new(Manager *manager, struct udev_device *device, Link **ret) {
_cleanup_link_free_ Link *link = NULL;
uint64_t ifindex;
+ const char *mac;
int r;
assert(device);
if (ifindex <= 0)
return -EINVAL;
+ mac = udev_device_get_sysattr_value(device, "address");
+ if (!mac)
+ return -EINVAL;
+
+ memcpy(&link->mac.ether_addr_octet[0], ether_aton(mac), ETH_ALEN);
link->ifindex = ifindex;
link->manager = manager;