mirror of
https://github.com/systemd/systemd.git
synced 2024-11-07 01:27:11 +03:00
networkd: store netmask and mac address explicitly
This commit is contained in:
parent
16be43684f
commit
8cd11a0f0f
@ -78,8 +78,7 @@ int address_configure(Manager *manager, Address *address, Link *link) {
|
||||
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) {
|
||||
@ -147,6 +146,8 @@ int config_parse_address(const char *unit,
|
||||
}
|
||||
|
||||
n->prefixlen = (unsigned char) i;
|
||||
n->netmask.s_addr = htonl(0xfffffffflu >> n->prefixlen);
|
||||
|
||||
address = strndup(rvalue, e - rvalue);
|
||||
if (!address)
|
||||
return log_oom();
|
||||
|
@ -29,6 +29,7 @@
|
||||
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);
|
||||
@ -42,6 +43,11 @@ int link_new(Manager *manager, struct udev_device *device, Link **ret) {
|
||||
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;
|
||||
|
||||
|
@ -64,6 +64,8 @@ struct Address {
|
||||
unsigned char prefixlen;
|
||||
char *label;
|
||||
|
||||
struct in_addr netmask;
|
||||
|
||||
union {
|
||||
struct in_addr in;
|
||||
struct in6_addr in6;
|
||||
@ -89,6 +91,7 @@ struct Link {
|
||||
Manager *manager;
|
||||
|
||||
int ifindex;
|
||||
struct ether_addr mac;
|
||||
|
||||
unsigned flags;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user