144d362409d5469aed47d19e7908d19bd194493aThomas Graf/*
244d362409d5469aed47d19e7908d19bd194493aThomas Graf * netlink/netlink.h		Netlink Interface
344d362409d5469aed47d19e7908d19bd194493aThomas Graf *
444d362409d5469aed47d19e7908d19bd194493aThomas Graf *	This library is free software; you can redistribute it and/or
544d362409d5469aed47d19e7908d19bd194493aThomas Graf *	modify it under the terms of the GNU Lesser General Public
644d362409d5469aed47d19e7908d19bd194493aThomas Graf *	License as published by the Free Software Foundation version 2.1
744d362409d5469aed47d19e7908d19bd194493aThomas Graf *	of the License.
844d362409d5469aed47d19e7908d19bd194493aThomas Graf *
944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
1044d362409d5469aed47d19e7908d19bd194493aThomas Graf */
1144d362409d5469aed47d19e7908d19bd194493aThomas Graf
1244d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef NETLINK_NETLINK_H_
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NETLINK_NETLINK_H_
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf
1544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <stdio.h>
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <stdint.h>
1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <string.h>
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <stdlib.h>
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <sys/poll.h>
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <sys/socket.h>
2144d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <sys/types.h>
2244d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <sys/time.h>
231f66555570e58a71ed7975b8d2b22dafc99f8ab8Thomas Graf#include <netdb.h>
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/netlink-compat.h>
2544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/netlink.h>
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/rtnetlink.h>
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/genetlink.h>
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/netfilter/nfnetlink.h>
2966330d37f58f506c423b263a4e40f094a52d4a09Thomas Graf#include <netlink/version.h>
308a3efffa5b3fde252675239914118664d36a2c24Thomas Graf#include <netlink/errno.h>
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/types.h>
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/handlers.h>
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/socket.h>
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifdef __cplusplus
3644d362409d5469aed47d19e7908d19bd194493aThomas Grafextern "C" {
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf
39dec2ea357d7f54c986d06a06b8233dd1a7c85245Pavel Roskinstruct ucred;
40dec2ea357d7f54c986d06a06b8233dd1a7c85245Pavel Roskin
4144d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_debug;
4244d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_dump_params nl_debug_dp;
4344d362409d5469aed47d19e7908d19bd194493aThomas Graf
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Connection Management */
451155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_connect(struct nl_sock *, int);
461155370f520cb64657e25153255cf7dc1424317fThomas Grafextern void			nl_close(struct nl_sock *);
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf
4844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Send */
491155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_sendto(struct nl_sock *, void *, size_t);
501155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_sendmsg(struct nl_sock *, struct nl_msg *,
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf					   struct msghdr *);
521155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_send(struct nl_sock *, struct nl_msg *);
5327c505eb89f7a689416f822e26c0ccea0b351ba3Karl Hiramotoextern int			nl_send_iovec(struct nl_sock *, struct nl_msg *,
54256d7e723c0ff402422d3501866e9301b3f64c0fThomas Graf					      struct iovec *, unsigned);
5527c505eb89f7a689416f822e26c0ccea0b351ba3Karl Hiramotoextern void			nl_auto_complete(struct nl_sock *,
5627c505eb89f7a689416f822e26c0ccea0b351ba3Karl Hiramoto						      struct nl_msg *);
571155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_send_auto_complete(struct nl_sock *,
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf						      struct nl_msg *);
591155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_send_simple(struct nl_sock *, int, int,
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf					       void *, size_t);
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Receive */
631155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_recv(struct nl_sock *,
6444d362409d5469aed47d19e7908d19bd194493aThomas Graf					struct sockaddr_nl *, unsigned char **,
6544d362409d5469aed47d19e7908d19bd194493aThomas Graf					struct ucred **);
6644d362409d5469aed47d19e7908d19bd194493aThomas Graf
671155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_recvmsgs(struct nl_sock *, struct nl_cb *);
6844d362409d5469aed47d19e7908d19bd194493aThomas Graf
691155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_recvmsgs_default(struct nl_sock *);
7044d362409d5469aed47d19e7908d19bd194493aThomas Graf
711155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int			nl_wait_for_ack(struct nl_sock *);
7244d362409d5469aed47d19e7908d19bd194493aThomas Graf
7344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Netlink Family Translations */
7444d362409d5469aed47d19e7908d19bd194493aThomas Grafextern char *			nl_nlfamily2str(int, char *, size_t);
7544d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int			nl_str2nlfamily(const char *);
7644d362409d5469aed47d19e7908d19bd194493aThomas Graf
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifdef __cplusplus
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf}
7944d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
8044d362409d5469aed47d19e7908d19bd194493aThomas Graf
8144d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
82