ofproto: Fix use-after-free error when ports disappear.
[sliver-openvswitch.git] / lib / netlink-socket.h
index ad06d81..f2a5d3f 100644 (file)
@@ -35,7 +35,7 @@
 #include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
-#include <sys/uio.h>
+#include "list.h"
 
 struct ofpbuf;
 struct nl_sock;
@@ -46,19 +46,36 @@ struct nl_sock;
 
 /* Netlink sockets. */
 int nl_sock_create(int protocol, struct nl_sock **);
+int nl_sock_clone(const struct nl_sock *, struct nl_sock **);
 void nl_sock_destroy(struct nl_sock *);
 
 int nl_sock_join_mcgroup(struct nl_sock *, unsigned int multicast_group);
 int nl_sock_leave_mcgroup(struct nl_sock *, unsigned int multicast_group);
 
 int nl_sock_send(struct nl_sock *, const struct ofpbuf *, bool wait);
-int nl_sock_sendv(struct nl_sock *sock, const struct iovec iov[], size_t n_iov,
-                  bool wait);
 int nl_sock_recv(struct nl_sock *, struct ofpbuf **, bool wait);
 int nl_sock_transact(struct nl_sock *, const struct ofpbuf *request,
                      struct ofpbuf **reply);
 
+int nl_sock_drain(struct nl_sock *);
+
 void nl_sock_wait(const struct nl_sock *, short int events);
+int nl_sock_fd(const struct nl_sock *);
+
+uint32_t nl_sock_pid(const struct nl_sock *);
+
+/* Batching transactions. */
+struct nl_transaction {
+    /* Filled in by client. */
+    struct ofpbuf *request;     /* Request to send. */
+
+    /* Filled in by nl_sock_transact_batch(). */
+    struct ofpbuf *reply;       /* Reply (NULL if reply was an error code). */
+    int error;                  /* Positive errno value, 0 if no error. */
+};
+
+void nl_sock_transact_multiple(struct nl_sock *,
+                               struct nl_transaction **, size_t n);
 
 /* Table dumping. */
 struct nl_dump {
@@ -75,5 +92,8 @@ int nl_dump_done(struct nl_dump *);
 
 /* Miscellaneous */
 int nl_lookup_genl_family(const char *name, int *number);
+int nl_lookup_genl_mcgroup(const char *family_name, const char *group_name,
+                           unsigned int *multicast_group,
+                           unsigned int fallback);
 
 #endif /* netlink-socket.h */