libnl
1.1
Main Page
Modules
Data Structures
Files
File List
users
builder
rpm
BUILD
libnl-1.1
include
netlink
msg.h
1
/*
2
* netlink/msg.c Netlink Messages Interface
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_MSG_H_
13
#define NETLINK_MSG_H_
14
15
#include <netlink/netlink.h>
16
#include <netlink/object.h>
17
#include <netlink/attr.h>
18
19
#ifdef __cplusplus
20
extern
"C"
{
21
#endif
22
23
#define NL_DONTPAD 0
24
25
/**
26
* @ingroup msg
27
* @brief
28
* Will cause the netlink pid to be set to the pid assigned to
29
* the netlink handle (socket) just before sending the message off.
30
* @note Requires the use of nl_send_auto_complete()!
31
*/
32
#define NL_AUTO_PID 0
33
34
/**
35
* @ingroup msg
36
* @brief
37
* May be used to refer to a sequence number which should be
38
* automatically set just before sending the message off.
39
* @note Requires the use of nl_send_auto_complete()!
40
*/
41
#define NL_AUTO_SEQ 0
42
43
struct
nl_msg;
44
struct
nl_tree;
45
struct
ucred;
46
47
/* size calculations */
48
extern
int
nlmsg_msg_size
(
int
);
49
extern
int
nlmsg_total_size
(
int
);
50
extern
int
nlmsg_padlen
(
int
);
51
52
/* payload access */
53
extern
void
*
nlmsg_data
(
const
struct
nlmsghdr
*);
54
extern
int
nlmsg_len
(
const
struct
nlmsghdr
*);
55
extern
void
* nlmsg_tail(
const
struct
nlmsghdr
*);
56
57
/* attribute access */
58
extern
struct
nlattr *
nlmsg_attrdata
(
const
struct
nlmsghdr
*,
int
);
59
extern
int
nlmsg_attrlen
(
const
struct
nlmsghdr
*,
int
);
60
61
/* message parsing */
62
extern
int
nlmsg_valid_hdr(
const
struct
nlmsghdr
*,
int
);
63
extern
int
nlmsg_ok
(
const
struct
nlmsghdr
*,
int
);
64
extern
struct
nlmsghdr
*
nlmsg_next
(
struct
nlmsghdr
*,
int
*);
65
extern
int
nlmsg_parse
(
struct
nlmsghdr
*,
int
,
struct
nlattr **,
66
int
,
struct
nla_policy
*);
67
extern
struct
nlattr *
nlmsg_find_attr
(
struct
nlmsghdr
*,
int
,
int
);
68
extern
int
nlmsg_validate
(
struct
nlmsghdr
*,
int
,
int
,
69
struct
nla_policy
*);
70
71
/* Backward compatibility */
72
#define nlmsg_new() nlmsg_alloc()
73
#define nlmsg_build_simple(a, b) nlmsg_alloc_simple(a, b)
74
#define nlmsg_build(ptr) nlmsg_inherit(ptr)
75
76
extern
struct
nl_msg *
nlmsg_alloc
(
void
);
77
extern
struct
nl_msg *
nlmsg_alloc_size
(
size_t
);
78
extern
struct
nl_msg *
nlmsg_alloc_simple
(
int
,
int
);
79
extern
void
nlmsg_set_default_size
(
size_t
);
80
extern
struct
nl_msg *
nlmsg_inherit
(
struct
nlmsghdr
*);
81
extern
struct
nl_msg *
nlmsg_convert
(
struct
nlmsghdr
*);
82
extern
void
*
nlmsg_reserve
(
struct
nl_msg *,
size_t
,
int
);
83
extern
int
nlmsg_append
(
struct
nl_msg *,
void
*,
size_t
,
int
);
84
extern
int
nlmsg_expand
(
struct
nl_msg *,
size_t
);
85
86
extern
struct
nlmsghdr
*
nlmsg_put
(
struct
nl_msg *, uint32_t, uint32_t,
87
int
,
int
,
int
);
88
extern
struct
nlmsghdr
*
nlmsg_hdr
(
struct
nl_msg *);
89
extern
void
nlmsg_free
(
struct
nl_msg *);
90
91
/* attribute modification */
92
extern
void
nlmsg_set_proto(
struct
nl_msg *,
int
);
93
extern
int
nlmsg_get_proto(
struct
nl_msg *);
94
extern
size_t
nlmsg_get_max_size(
struct
nl_msg *);
95
extern
void
nlmsg_set_src(
struct
nl_msg *,
struct
sockaddr_nl
*);
96
extern
struct
sockaddr_nl
*nlmsg_get_src(
struct
nl_msg *);
97
extern
void
nlmsg_set_dst(
struct
nl_msg *,
struct
sockaddr_nl
*);
98
extern
struct
sockaddr_nl
*nlmsg_get_dst(
struct
nl_msg *);
99
extern
void
nlmsg_set_creds(
struct
nl_msg *,
struct
ucred *);
100
extern
struct
ucred * nlmsg_get_creds(
struct
nl_msg *);
101
102
extern
char
* nl_nlmsgtype2str(
int
,
char
*,
size_t
);
103
extern
int
nl_str2nlmsgtype(
const
char
*);
104
105
extern
char
* nl_nlmsg_flags2str(
int
,
char
*,
size_t
);
106
107
extern
int
nl_msg_parse(
struct
nl_msg *,
108
void
(*cb)(
struct
nl_object *,
void
*),
109
void
*);
110
111
extern
void
nl_msg_dump
(
struct
nl_msg *, FILE *);
112
113
/**
114
* @name Iterators
115
* @{
116
*/
117
118
/**
119
* @ingroup msg
120
* Iterate over a stream of attributes in a message
121
* @arg pos loop counter, set to current attribute
122
* @arg nlh netlink message header
123
* @arg hdrlen length of family header
124
* @arg rem initialized to len, holds bytes currently remaining in stream
125
*/
126
#define nlmsg_for_each_attr(pos, nlh, hdrlen, rem) \
127
nla_for_each_attr(pos, nlmsg_attrdata(nlh, hdrlen), \
128
nlmsg_attrlen(nlh, hdrlen), rem)
129
130
/**
131
* Iterate over a stream of messages
132
* @arg pos loop counter, set to current message
133
* @arg head head of message stream
134
* @arg len length of message stream
135
* @arg rem initialized to len, holds bytes currently remaining in stream
136
*/
137
#define nlmsg_for_each_msg(pos, head, len, rem) \
138
for (pos = head, rem = len; \
139
nlmsg_ok(pos, rem); \
140
pos = nlmsg_next(pos, &(rem)))
141
142
/** @} */
143
144
#ifdef __cplusplus
145
}
146
#endif
147
148
#endif
Generated on Tue Jul 2 2013 12:56:24 for libnl by
1.8.3.1