static void test_match(void) { _cleanup_rtnl_unref_ sd_rtnl *rtnl = NULL; assert_se(sd_rtnl_open(&rtnl, 0) >= 0); assert_se(sd_rtnl_add_match(rtnl, RTM_NEWLINK, &link_handler, NULL) >= 0); assert_se(sd_rtnl_add_match(rtnl, RTM_NEWLINK, &link_handler, NULL) >= 0); assert_se(sd_rtnl_remove_match(rtnl, RTM_NEWLINK, &link_handler, NULL) == 1); assert_se(sd_rtnl_remove_match(rtnl, RTM_NEWLINK, &link_handler, NULL) == 1); assert_se(sd_rtnl_remove_match(rtnl, RTM_NEWLINK, &link_handler, NULL) == 0); assert_se((rtnl = sd_rtnl_unref(rtnl)) == NULL); }
int manager_rtnl_listen(Manager *m) { int r; r = sd_rtnl_attach_event(m->rtnl, m->event, 0); if (r < 0) return r; r = sd_rtnl_add_match(m->rtnl, RTM_NEWLINK, &manager_rtnl_process_link, m); if (r < 0) return r; return 0; }