networkd-wait-online-link.c revision b5efdb8af40ea759a1ea584c1bc44ecc81dd00ce
a51c10485af349eb15faa4d1a63b9818bcf3e589Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen This file is part of systemd.
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen Copyright 2014 Lennart Poettering
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen Copyright 2014 Tom Gundersen
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen systemd is free software; you can redistribute it and/or modify it
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen under the terms of the GNU Lesser General Public License as published by
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen the Free Software Foundation; either version 2.1 of the License, or
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen (at your option) any later version.
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen systemd is distributed in the hope that it will be useful, but
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen WITHOUT ANY WARRANTY; without even the implied warranty of
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen Lesser General Public License for more details.
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen You should have received a copy of the GNU Lesser General Public License
091a364c802e34a58f3260c9cb5db9b75c62215cTom Gundersen along with systemd; If not, see <http://www.gnu.org/licenses/>.
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek#include "networkd-wait-online-link.h"
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekint link_new(Manager *m, Link **ret, int ifindex, const char *ifname) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek _cleanup_(link_freep) Link *l = NULL;
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = hashmap_ensure_allocated(&m->links, NULL);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = hashmap_ensure_allocated(&m->links_by_name, &string_hash_ops);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = hashmap_put(m->links_by_name, l->ifname, l);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = hashmap_put(m->links, INT_TO_PTR(ifindex), l);
adc800a6e0bf5483585e4210cf7125a7477ad85eLennart Poettering hashmap_remove(l->manager->links, INT_TO_PTR(l->ifindex));
adc800a6e0bf5483585e4210cf7125a7477ad85eLennart Poettering hashmap_remove(l->manager->links_by_name, l->ifname);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmekint link_update_rtnl(Link *l, sd_netlink_message *m) {
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = sd_rtnl_message_link_get_flags(m, &l->flags);
adc800a6e0bf5483585e4210cf7125a7477ad85eLennart Poettering r = sd_netlink_message_read_string(m, IFLA_IFNAME, &ifname);
adc800a6e0bf5483585e4210cf7125a7477ad85eLennart Poettering hashmap_remove(l->manager->links_by_name, l->ifname);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek r = hashmap_put(l->manager->links_by_name, l->ifname, l);
adc800a6e0bf5483585e4210cf7125a7477ad85eLennart Poettering l->operational_state = mfree(l->operational_state);
798d3a524ea57aaf40cb53858aaa45ec702f012dZbigniew Jędrzejewski-Szmek sd_network_link_get_operational_state(l->ifindex, &l->operational_state);