144d362409d5469aed47d19e7908d19bd194493aThomas Graf/*
244d362409d5469aed47d19e7908d19bd194493aThomas Graf * netlink/netlink-types.h	Netlink Types
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_TYPES_H_
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define __NETLINK_TYPES_H_
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf
1544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <stdio.h>
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf
1744d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf * Dumping types (dp_type)
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup utils
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf */
2144d362409d5469aed47d19e7908d19bd194493aThomas Grafenum nl_dump_type {
22d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf	NL_DUMP_LINE,		/**< Dump object briefly on one line */
23662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf	NL_DUMP_DETAILS,	/**< Dump all attributes but no statistics */
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_DUMP_STATS,		/**< Dump all attributes including statistics */
2544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_DUMP_ENV,		/**< Dump all attribtues as env variables */
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__NL_DUMP_MAX,
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_DUMP_MAX (__NL_DUMP_MAX - 1)
2944d362409d5469aed47d19e7908d19bd194493aThomas Graf
3044d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf * Dumping parameters
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup utils
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf */
3444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_dump_params
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Specifies the type of dump that is requested.
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf	enum nl_dump_type	dp_type;
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf
4144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Specifies the number of whitespaces to be put in front
4344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * of every new line (indentation).
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			dp_prefix;
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
4844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Causes the cache index to be printed for each element.
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			dp_print_index;
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf
5244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Causes each element to be prefixed with the message type.
5444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
5544d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			dp_dump_msgtype;
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * A callback invoked for output
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 *
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Passed arguments are:
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 *  - dumping parameters
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 *  - string to append to the output
6344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
6444d362409d5469aed47d19e7908d19bd194493aThomas Graf	void			(*dp_cb)(struct nl_dump_params *, char *);
6544d362409d5469aed47d19e7908d19bd194493aThomas Graf
6644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
6744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * A callback invoked for every new line, can be used to
6844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * customize the indentation.
6944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 *
7044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Passed arguments are:
7144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 *  - dumping parameters
7244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 *  - line number starting from 0
7344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
7444d362409d5469aed47d19e7908d19bd194493aThomas Graf	void			(*dp_nl_cb)(struct nl_dump_params *, int);
7544d362409d5469aed47d19e7908d19bd194493aThomas Graf
7644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * User data pointer, can be used to pass data to callbacks.
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
7944d362409d5469aed47d19e7908d19bd194493aThomas Graf	void			*dp_data;
8044d362409d5469aed47d19e7908d19bd194493aThomas Graf
8144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
8244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * File descriptor the dumping output should go to
8344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
8444d362409d5469aed47d19e7908d19bd194493aThomas Graf	FILE *			dp_fd;
8544d362409d5469aed47d19e7908d19bd194493aThomas Graf
8644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
8744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Alternatively the output may be redirected into a buffer
8844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
8944d362409d5469aed47d19e7908d19bd194493aThomas Graf	char *			dp_buf;
9044d362409d5469aed47d19e7908d19bd194493aThomas Graf
9144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
9244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Length of the buffer dp_buf
9344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
9444d362409d5469aed47d19e7908d19bd194493aThomas Graf	size_t			dp_buflen;
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf
9644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * PRIVATE
9844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Set if a dump was performed prior to the actual dump handler.
9944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
10044d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			dp_pre_dump;
101662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf
102662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf	/**
103662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf	 * PRIVATE
104662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf	 * Owned by the current caller
105662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf	 */
106662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf	int			dp_ivar;
107662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf
108662887c052f0fcd98287e2a7fa5843a4f66ca256Thomas Graf	unsigned int		dp_line;
10944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf
11144d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
112