X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-rtnl%2Frtnl-internal.h;h=2e0b7b8f373f836a6e97b155437eb610849f0cf4;hb=3fd11280e82f590eaeda1e3945dafadf82cd8727;hp=03297bb8de70e1f94d18b80153d4882e319e5c4d;hpb=4555ec72d6530fce4c978fd894ac22f7e006b0ee;p=elogind.git diff --git a/src/libsystemd-rtnl/rtnl-internal.h b/src/libsystemd-rtnl/rtnl-internal.h index 03297bb8d..2e0b7b8f3 100644 --- a/src/libsystemd-rtnl/rtnl-internal.h +++ b/src/libsystemd-rtnl/rtnl-internal.h @@ -24,6 +24,26 @@ #include #include "refcnt.h" +#include "prioq.h" +#include "list.h" + +#include "sd-rtnl.h" + +struct reply_callback { + sd_rtnl_message_handler_t callback; + void *userdata; + usec_t timeout; + uint64_t serial; + unsigned prioq_idx; +}; + +struct match_callback { + sd_rtnl_message_handler_t callback; + uint16_t type; + void *userdata; + + LIST_FIELDS(struct match_callback, match_callbacks); +}; struct sd_rtnl { RefCount n_ref; @@ -45,7 +65,17 @@ struct sd_rtnl { uint32_t serial; + struct Prioq *reply_callbacks_prioq; + Hashmap *reply_callbacks; + + LIST_HEAD(struct match_callback, match_callbacks); + pid_t original_pid; + + sd_event_source *io_event_source; + sd_event_source *time_event_source; + sd_event_source *exit_event_source; + sd_event *event; }; #define RTNL_DEFAULT_TIMEOUT ((usec_t) (10 * USEC_PER_SEC)) @@ -53,8 +83,17 @@ struct sd_rtnl { #define RTNL_WQUEUE_MAX 1024 #define RTNL_RQUEUE_MAX 64*1024 -int message_get_errno(sd_rtnl_message *m); +int message_new_synthetic_error(int error, uint32_t serial, sd_rtnl_message **ret); uint32_t message_get_serial(sd_rtnl_message *m); int message_seal(sd_rtnl *nl, sd_rtnl_message *m); + +bool message_type_is_link(uint16_t type); +bool message_type_is_addr(uint16_t type); +bool message_type_is_route(uint16_t type); + int socket_write_message(sd_rtnl *nl, sd_rtnl_message *m); int socket_read_message(sd_rtnl *nl, sd_rtnl_message **ret); + +/* Make sure callbacks don't destroy the rtnl connection */ +#define RTNL_DONT_DESTROY(rtnl) \ + _cleanup_sd_rtnl_unref_ _unused_ sd_rtnl *_dont_destroy_##rtnl = sd_rtnl_ref(rtnl)