aboutsummaryrefslogtreecommitdiff
path: root/lib/netlink-socket.h
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2010-12-10 09:51:03 -0800
committerBen Pfaff <blp@nicira.com>2010-12-10 11:13:27 -0800
commit2fe27d5ad27f3c7879ea696209bcf9702d9b7109 (patch)
tree943745f56a960fcd88b14205271fbf4d7d987f6f /lib/netlink-socket.h
parent365a25176bf854112b37c56888979d7755ab0d72 (diff)
netlink: Split into generic and Linux-specific parts.
The parts of the netlink module that are related to sockets are Linux-specific, since only Linux has AF_NETLINK sockets. The rest can be built anywhere. This commit breaks them into two modules, and builds the generic one on all platforms. Acked-by: Jesse Gross <jesse@nicira.com>
Diffstat (limited to 'lib/netlink-socket.h')
-rw-r--r--lib/netlink-socket.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/lib/netlink-socket.h b/lib/netlink-socket.h
new file mode 100644
index 00000000..dc21ce83
--- /dev/null
+++ b/lib/netlink-socket.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2008, 2009, 2010 Nicira Networks.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef NETLINK_SOCKET_H
+#define NETLINK_SOCKET_H 1
+
+/* Netlink socket definitions.
+ *
+ * Netlink is a datagram-based network protocol primarily for communication
+ * between user processes and the kernel, and mainly on Linux. Netlink is
+ * specified in RFC 3549, "Linux Netlink as an IP Services Protocol".
+ *
+ * Netlink is not suitable for use in physical networks of heterogeneous
+ * machines because host byte order is used throughout.
+ *
+ * This header file defines functions for working with Netlink sockets, which
+ * are Linux-specific. For Netlink protocol definitions, see
+ * netlink-protocol.h. For helper functions for working with Netlink messages,
+ * see netlink.h.
+ */
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <sys/uio.h>
+
+struct ofpbuf;
+struct nl_sock;
+
+#ifndef HAVE_NETLINK
+#error "netlink-socket.h is only for hosts that support Netlink sockets"
+#endif
+
+/* Netlink sockets. */
+int nl_sock_create(int protocol, int multicast_group,
+ size_t so_sndbuf, size_t so_rcvbuf,
+ struct nl_sock **);
+void nl_sock_destroy(struct nl_sock *);
+
+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);
+
+void nl_sock_wait(const struct nl_sock *, short int events);
+
+/* 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. */
+ int status; /* 0=OK, EOF=done, or positive errno value. */
+};
+
+void nl_dump_start(struct nl_dump *, struct nl_sock *,
+ const struct ofpbuf *request);
+bool nl_dump_next(struct nl_dump *, struct ofpbuf *reply);
+int nl_dump_done(struct nl_dump *);
+
+/* Miscellaneous */
+int nl_lookup_genl_family(const char *name, int *number);
+
+#endif /* netlink-socket.h */