diff options
author | Ben Pfaff <blp@nicira.com> | 2010-12-10 09:51:03 -0800 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2010-12-10 11:13:27 -0800 |
commit | 2fe27d5ad27f3c7879ea696209bcf9702d9b7109 (patch) | |
tree | 943745f56a960fcd88b14205271fbf4d7d987f6f /lib/netlink-socket.h | |
parent | 365a25176bf854112b37c56888979d7755ab0d72 (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.h | 78 |
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 */ |