lib: check for integer-overflow in nlmsg_reserve()
[platform/upstream/libnl3.git] / include / netlink / types.h
1 /*
2  * netlink/types.h              Definition of public 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-2012 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  * @ingroup utils
19  * Enumeration of dumping variations (dp_type)
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_MAX,
26 };
27 #define NL_DUMP_MAX (__NL_DUMP_MAX - 1)
28
29 /**
30  * @ingroup utils
31  * Dumping parameters
32  */
33 struct nl_dump_params
34 {
35         /**
36          * Specifies the type of dump that is requested.
37          */
38         enum nl_dump_type       dp_type;
39
40         /**
41          * Specifies the number of whitespaces to be put in front
42          * of every new line (indentation).
43          */
44         int                     dp_prefix;
45
46         /**
47          * Causes the cache index to be printed for each element.
48          */
49         int                     dp_print_index;
50
51         /**
52          * Causes each element to be prefixed with the message type.
53          */
54         int                     dp_dump_msgtype;
55
56         /**
57          * A callback invoked for output
58          *
59          * Passed arguments are:
60          *  - dumping parameters
61          *  - string to append to the output
62          */
63         void                    (*dp_cb)(struct nl_dump_params *, char *);
64
65         /**
66          * A callback invoked for every new line, can be used to
67          * customize the indentation.
68          *
69          * Passed arguments are:
70          *  - dumping parameters
71          *  - line number starting from 0
72          */
73         void                    (*dp_nl_cb)(struct nl_dump_params *, int);
74
75         /**
76          * User data pointer, can be used to pass data to callbacks.
77          */
78         void                    *dp_data;
79
80         /**
81          * File descriptor the dumping output should go to
82          */
83         FILE *                  dp_fd;
84
85         /**
86          * Alternatively the output may be redirected into a buffer
87          */
88         char *                  dp_buf;
89
90         /**
91          * Length of the buffer dp_buf
92          */
93         size_t                  dp_buflen;
94
95         /**
96          * PRIVATE
97          * Set if a dump was performed prior to the actual dump handler.
98          */
99         int                     dp_pre_dump;
100
101         /**
102          * PRIVATE
103          * Owned by the current caller
104          */
105         int                     dp_ivar;
106
107         unsigned int            dp_line;
108 };
109
110 #endif