1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-24 21:34:08 +03:00

networkd: make sure Network and Link can always be freed

Also, don't fail a link just because we can't find its MAC address.
This commit is contained in:
Tom Gundersen 2013-11-21 21:04:04 +01:00
parent 602cc437e8
commit 5a3eb5a77d
2 changed files with 10 additions and 13 deletions

View File

@ -39,22 +39,19 @@ int link_new(Manager *manager, struct udev_device *device, Link **ret) {
if (!link)
return -ENOMEM;
link->manager = manager;
link->state = _LINK_STATE_INVALID;
link->ifindex = udev_device_get_ifindex(device);
if (link->ifindex <= 0)
return -EINVAL;
mac = udev_device_get_sysattr_value(device, "address");
if (!mac)
return -EINVAL;
mac_addr = ether_aton(mac);
if (!mac_addr)
return -EINVAL;
memcpy(&link->mac, mac_addr, sizeof(struct ether_addr));
link->manager = manager;
link->state = _LINK_STATE_INVALID;
if (mac) {
mac_addr = ether_aton(mac);
if (mac_addr)
memcpy(&link->mac, mac_addr, sizeof(struct ether_addr));
}
r = hashmap_put(manager->links, &link->ifindex, link);
if (r < 0)

View File

@ -42,6 +42,8 @@ static int network_load_one(Manager *manager, const char *filename) {
if (!network)
return log_oom();
network->manager = manager;
LIST_HEAD_INIT(network->addresses);
r = config_parse(NULL, filename, file, "Match\0Network\0", config_item_perf_lookup,
@ -56,8 +58,6 @@ static int network_load_one(Manager *manager, const char *filename) {
if (!network->filename)
return log_oom();
network->manager = manager;
LIST_PREPEND(networks, manager->networks, network);
network = NULL;