-static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, void *userdata) {
- Manager *m = userdata;
- Link *link;
- const char *name;
- uint64_t ifindex_64;
- int r, ifindex;
-
- r = sd_rtnl_message_link_get_ifindex(message, &ifindex);
- if (r < 0 || ifindex <= 0) {
- log_debug("received RTM_NEWLINK message without valid ifindex");
- return 0;
- }
-
- r = rtnl_message_link_get_ifname(message, &name);
- if (r < 0)
- log_debug("received RTM_NEWLINK message without valid IFLA_IFNAME");
- else {
- NetDev *netdev;
-
- r = netdev_get(m, name, &netdev);
- if (r >= 0) {
- r = netdev_set_ifindex(netdev, ifindex);
- if (r < 0)
- log_debug("could not set ifindex of netdev '%s' to %d: %s",
- name, ifindex, strerror(-r));
- }
- }
-
- ifindex_64 = ifindex;
- link = hashmap_get(m->links, &ifindex_64);
- if (!link) {
- log_debug("received RTM_NEWLINK message for untracked ifindex %d", ifindex);
- return 0;
- }
-
- /* only track the status of links we want to manage */
- if (link->network) {
- r = link_update(link, message);
- if (r < 0)
- return 0;
- } else
- log_debug("%s: received RTM_NEWLINK message for unmanaged link", link->ifname);
-
- return 1;
-}
-