-static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, void *userdata) {
- Manager *m = userdata;
- Link *link;
- char *name;
- int r, ifindex;
-
- assert(rtnl);
- assert(message);
- assert(m);
-
- r = sd_rtnl_message_link_get_ifindex(message, &ifindex);
- if (r < 0 || ifindex <= 0) {
- log_warning("received RTM_NEWLINK message without valid ifindex");
- return 0;
- }
-
- r = sd_rtnl_message_read_string(message, IFLA_IFNAME, &name);
- if (r < 0)
- log_warning("received RTM_NEWLINK message without valid ifname");
- else {
- NetDev *netdev;
-
- r = netdev_get(m, name, &netdev);
- if (r >= 0) {
- netdev_set_ifindex(netdev, message);
- r = sd_rtnl_message_rewind(message);
- if (r < 0) {
- log_debug("could not rewind rtnl message");
- return 0;
- }
- }
- }
-
- r = link_get(m, ifindex, &link);
- if (r < 0) {
- 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;
-}
-