return rtnl->original_pid != getpid();
}
-int sd_rtnl_open(uint32_t groups, sd_rtnl **ret) {
- _cleanup_sd_rtnl_unref_ sd_rtnl *rtnl = NULL;
+int sd_rtnl_open(sd_rtnl **ret, uint32_t groups) {
+ _cleanup_rtnl_unref_ sd_rtnl *rtnl = NULL;
socklen_t addrlen;
int r;
free(f);
}
- if (rtnl->fd >= 0)
- close_nointr_nofail(rtnl->fd);
-
+ safe_close(rtnl->fd);
free(rtnl);
}
assert_return(!rtnl_pid_changed(nl), -ECHILD);
assert_return(message, -EINVAL);
- r = message_seal(nl, message);
+ r = rtnl_message_seal(nl, message);
if (r < 0)
return r;
}
if (serial)
- *serial = message_get_serial(message);
+ *serial = rtnl_message_get_serial(message);
return 1;
}
}
static int process_timeout(sd_rtnl *rtnl) {
- _cleanup_sd_rtnl_message_unref_ sd_rtnl_message *m = NULL;
+ _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
struct reply_callback *c;
usec_t n;
int r;
if (c->timeout > n)
return 0;
- r = message_new_synthetic_error(-ETIMEDOUT, c->serial, &m);
+ r = rtnl_message_new_synthetic_error(-ETIMEDOUT, c->serial, &m);
if (r < 0)
return r;
assert(rtnl);
assert(m);
- serial = message_get_serial(m);
+ if (sd_rtnl_message_is_broadcast(m))
+ return 0;
+
+ serial = rtnl_message_get_serial(m);
c = hashmap_remove(rtnl->reply_callbacks, &serial);
if (!c)
return 0;
}
static int process_running(sd_rtnl *rtnl, sd_rtnl_message **ret) {
- _cleanup_sd_rtnl_message_unref_ sd_rtnl_message *m = NULL;
+ _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
int r;
assert(rtnl);
for (;;) {
usec_t left;
- _cleanup_sd_rtnl_message_unref_ sd_rtnl_message *incoming = NULL;
+ _cleanup_rtnl_message_unref_ sd_rtnl_message *incoming = NULL;
if (!room) {
sd_rtnl_message **q;
if (r < 0)
return r;
if (incoming) {
- uint32_t received_serial = message_get_serial(incoming);
+ uint32_t received_serial = rtnl_message_get_serial(incoming);
if (received_serial == serial) {
r = sd_rtnl_message_get_errno(incoming);
return r;
}
- r = sd_event_add_io(rtnl->event, rtnl->fd, 0, io_callback, rtnl, &rtnl->io_event_source);
+ r = sd_event_add_io(rtnl->event, &rtnl->io_event_source, rtnl->fd, 0, io_callback, rtnl);
if (r < 0)
goto fail;
if (r < 0)
goto fail;
- r = sd_event_add_monotonic(rtnl->event, 0, 0, time_callback, rtnl, &rtnl->time_event_source);
+ r = sd_event_add_monotonic(rtnl->event, &rtnl->time_event_source, 0, 0, time_callback, rtnl);
if (r < 0)
goto fail;
if (r < 0)
goto fail;
- r = sd_event_add_exit(rtnl->event, exit_callback, rtnl, &rtnl->exit_event_source);
+ r = sd_event_add_exit(rtnl->event, &rtnl->exit_event_source, exit_callback, rtnl);
if (r < 0)
goto fail;
assert_return(rtnl, -EINVAL);
assert_return(callback, -EINVAL);
assert_return(!rtnl_pid_changed(rtnl), -ECHILD);
- assert_return(message_type_is_link(type) || message_type_is_addr(type) || message_type_is_route(type), -ENOTSUP);
+ assert_return(rtnl_message_type_is_link(type) ||
+ rtnl_message_type_is_addr(type) ||
+ rtnl_message_type_is_route(type), -ENOTSUP);
c = new0(struct match_callback, 1);
if (!c)