1 /*
2  * netlink/netlink-types.h	Netlink Types
3  *
4  *	This library is free software; you can redistribute it and/or
5  *	modify it under the terms of the GNU Lesser General Public
6  *	License as published by the Free Software Foundation version 2.1
7  *	of the License.
8  *
9  * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
10  */
11 
12 #ifndef __NETLINK_TYPES_H_
13 #define __NETLINK_TYPES_H_
14 
15 #include <stdio.h>
16 
17 /**
18  * Dumping types (dp_type)
19  * @ingroup utils
20  */
21 enum nl_dump_type {
22 	NL_DUMP_LINE,		/**< Dump object briefly on one line */
23 	NL_DUMP_DETAILS,	/**< Dump all attributes but no statistics */
24 	NL_DUMP_STATS,		/**< Dump all attributes including statistics */
25 	NL_DUMP_ENV,		/**< Dump all attribtues as env variables */
26 	__NL_DUMP_MAX,
27 };
28 #define NL_DUMP_MAX (__NL_DUMP_MAX - 1)
29 
30 /**
31  * Dumping parameters
32  * @ingroup utils
33  */
34 struct nl_dump_params
35 {
36 	/**
37 	 * Specifies the type of dump that is requested.
38 	 */
39 	enum nl_dump_type	dp_type;
40 
41 	/**
42 	 * Specifies the number of whitespaces to be put in front
43 	 * of every new line (indentation).
44 	 */
45 	int			dp_prefix;
46 
47 	/**
48 	 * Causes the cache index to be printed for each element.
49 	 */
50 	int			dp_print_index;
51 
52 	/**
53 	 * Causes each element to be prefixed with the message type.
54 	 */
55 	int			dp_dump_msgtype;
56 
57 	/**
58 	 * A callback invoked for output
59 	 *
60 	 * Passed arguments are:
61 	 *  - dumping parameters
62 	 *  - string to append to the output
63 	 */
64 	void			(*dp_cb)(struct nl_dump_params *, char *);
65 
66 	/**
67 	 * A callback invoked for every new line, can be used to
68 	 * customize the indentation.
69 	 *
70 	 * Passed arguments are:
71 	 *  - dumping parameters
72 	 *  - line number starting from 0
73 	 */
74 	void			(*dp_nl_cb)(struct nl_dump_params *, int);
75 
76 	/**
77 	 * User data pointer, can be used to pass data to callbacks.
78 	 */
79 	void			*dp_data;
80 
81 	/**
82 	 * File descriptor the dumping output should go to
83 	 */
84 	FILE *			dp_fd;
85 
86 	/**
87 	 * Alternatively the output may be redirected into a buffer
88 	 */
89 	char *			dp_buf;
90 
91 	/**
92 	 * Length of the buffer dp_buf
93 	 */
94 	size_t			dp_buflen;
95 
96 	/**
97 	 * PRIVATE
98 	 * Set if a dump was performed prior to the actual dump handler.
99 	 */
100 	int			dp_pre_dump;
101 
102 	/**
103 	 * PRIVATE
104 	 * Owned by the current caller
105 	 */
106 	int			dp_ivar;
107 
108 	unsigned int		dp_line;
109 };
110 
111 #endif
112