git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git://openvswitch.org/openvswitch
[sliver-openvswitch.git]
/
lib
/
netlink-socket.h
diff --git
a/lib/netlink-socket.h
b/lib/netlink-socket.h
index
b6356b9
..
986b574
100644
(file)
--- a/
lib/netlink-socket.h
+++ b/
lib/netlink-socket.h
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (c) 2008, 2009, 2010, 2011
Nicira Networks
.
+ * Copyright (c) 2008, 2009, 2010, 2011
, 2012, 2013 Nicira, Inc
.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@
-30,14
+30,19
@@
* are Linux-specific. For Netlink protocol definitions, see
* netlink-protocol.h. For helper functions for working with Netlink messages,
* see netlink.h.
* are Linux-specific. For Netlink protocol definitions, see
* netlink-protocol.h. For helper functions for working with Netlink messages,
* see netlink.h.
+ *
+ *
+ * Thread-safety
+ * =============
+ *
+ * Only a single thread may use a given nl_sock or nl_dump at one time.
*/
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
*/
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
-#include "
list
.h"
+#include "
ofpbuf
.h"
-struct ofpbuf;
struct nl_sock;
#ifndef HAVE_NETLINK
struct nl_sock;
#ifndef HAVE_NETLINK
@@
-53,13
+58,16
@@
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_leave_mcgroup(struct nl_sock *, unsigned int multicast_group);
int nl_sock_send(struct nl_sock *, const struct ofpbuf *, bool wait);
-int nl_sock_recv(struct nl_sock *, struct ofpbuf **, bool wait);
+int nl_sock_send_seq(struct nl_sock *, const struct ofpbuf *,
+ uint32_t nlmsg_seq, bool wait);
+int nl_sock_recv(struct nl_sock *, struct ofpbuf *, bool wait);
int nl_sock_transact(struct nl_sock *, const struct ofpbuf *request,
int nl_sock_transact(struct nl_sock *, const struct ofpbuf *request,
- struct ofpbuf **reply);
+ struct ofpbuf **reply
p
);
int nl_sock_drain(struct nl_sock *);
void nl_sock_wait(const struct nl_sock *, short int events);
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 *);
uint32_t nl_sock_pid(const struct nl_sock *);
@@
-68,23
+76,34
@@
struct nl_transaction {
/* Filled in by client. */
struct ofpbuf *request; /* Request to send. */
/* 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). */
+ /* The client must initialize 'reply' to one of:
+ *
+ * - NULL, if it does not care to examine the reply.
+ *
+ * - Otherwise, to an ofpbuf with a memory allocation of at least
+ * NLMSG_HDRLEN bytes.
+ */
+ struct ofpbuf *reply; /* Reply (empty 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);
int error; /* Positive errno value, 0 if no error. */
};
void nl_sock_transact_multiple(struct nl_sock *,
struct nl_transaction **, size_t n);
+/* Transactions without an allocated socket. */
+int nl_transact(int protocol, const struct ofpbuf *request,
+ struct ofpbuf **replyp);
+void nl_transact_multiple(int protocol, struct nl_transaction **, size_t n);
+
/* Table dumping. */
struct nl_dump {
struct nl_sock *sock; /* Socket being dumped. */
uint32_t seq; /* Expected nlmsg_seq for replies. */
/* Table dumping. */
struct nl_dump {
struct nl_sock *sock; /* Socket being dumped. */
uint32_t seq; /* Expected nlmsg_seq for replies. */
- struct ofpbuf
*buffer;
/* Receive buffer currently being iterated. */
+ struct ofpbuf
buffer;
/* Receive buffer currently being iterated. */
int status; /* 0=OK, EOF=done, or positive errno value. */
};
int status; /* 0=OK, EOF=done, or positive errno value. */
};
-void nl_dump_start(struct nl_dump *,
struct nl_sock *
,
+void nl_dump_start(struct nl_dump *,
int protocol
,
const struct ofpbuf *request);
bool nl_dump_next(struct nl_dump *, struct ofpbuf *reply);
int nl_dump_done(struct nl_dump *);
const struct ofpbuf *request);
bool nl_dump_next(struct nl_dump *, struct ofpbuf *reply);
int nl_dump_done(struct nl_dump *);