libnl
3.2.7
Main Page
Related Pages
Modules
Data Structures
api.h
1
/*
2
* netlink/route/link/api.h Link Modules API
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-2010 Thomas Graf <tgraf@suug.ch>
10
*/
11
12
#ifndef NETLINK_LINK_API_H_
13
#define NETLINK_LINK_API_H_
14
15
#include <netlink/netlink.h>
16
17
#ifdef __cplusplus
18
extern
"C"
{
19
#endif
20
21
/**
22
* @ingroup link_api
23
*
24
* Available operations to modules implementing a link info type.
25
*/
26
struct
rtnl_link_info_ops
27
{
28
/** Name of link info type, must match name on kernel side */
29
char
*
io_name
;
30
31
/** Reference count, DO NOT MODIFY */
32
int
io_refcnt
;
33
34
/** Called to assign an info type to a link.
35
* Has to allocate enough resources to hold attributes. Can
36
* use link->l_info to store a pointer. */
37
int (*
io_alloc
)(
struct
rtnl_link
*);
38
39
/** Called to parse the link info attribute.
40
* Must parse the attribute and assign all values to the link.
41
*/
42
int (*
io_parse
)(
struct
rtnl_link
*,
43
struct
nlattr *,
44
struct
nlattr *);
45
46
/** Called when the link object is dumped.
47
* Must dump the info type specific attributes. */
48
void (*
io_dump
[NL_DUMP_MAX+1])(
struct
rtnl_link
*,
49
struct
nl_dump_params
*);
50
51
/** Called when a link object is cloned.
52
* Must clone all info type specific attributes. */
53
int (*
io_clone
)(
struct
rtnl_link
*,
struct
rtnl_link
*);
54
55
/** Called when construction a link netlink message.
56
* Must append all info type specific attributes to the message. */
57
int (*
io_put_attrs
)(
struct
nl_msg *,
struct
rtnl_link
*);
58
59
/** Called to release all resources previously allocated
60
* in either io_alloc() or io_parse(). */
61
void (*
io_free
)(
struct
rtnl_link
*);
62
63
struct
nl_list_head
io_list;
64
};
65
66
extern
struct
rtnl_link_info_ops
*
rtnl_link_info_ops_lookup
(
const
char
*);
67
extern
void
rtnl_link_info_ops_put
(
struct
rtnl_link_info_ops
*);
68
extern
int
rtnl_link_register_info
(
struct
rtnl_link_info_ops
*);
69
extern
int
rtnl_link_unregister_info
(
struct
rtnl_link_info_ops
*);
70
71
72
/**
73
* @ingroup link_api
74
*
75
* Available operations to modules implementing a link address family.
76
*/
77
struct
rtnl_link_af_ops
78
{
79
/** The address family this operations set implements */
80
const
unsigned
int
ao_family
;
81
82
/** Number of users of this operations, DO NOT MODIFY. */
83
int
ao_refcnt
;
84
85
/** Validation policy for IFLA_PROTINFO attribute. This pointer
86
* can be set to a nla_policy structure describing the minimal
87
* requirements the attribute must meet. Failure of meeting these
88
* requirements will result in a parsing error. */
89
const
struct
nla_policy
*
ao_protinfo_policy
;
90
91
/** Called after address family has been assigned to link. Must
92
* allocate data buffer to hold address family specific data and
93
* store it in link->l_af_data. */
94
void
* (*ao_alloc)(
struct
rtnl_link
*);
95
96
/** Called when the link is cloned, must allocate a clone of the
97
* address family specific buffer and return it. */
98
void
* (*ao_clone)(
struct
rtnl_link
*,
void
*);
99
100
/** Called when the link gets freed. Must free all allocated data */
101
void (*
ao_free
)(
struct
rtnl_link
*,
void
*);
102
103
/** Called if a IFLA_PROTINFO attribute needs to be parsed. Typically
104
* stores the parsed data in the address family specific buffer. */
105
int (*
ao_parse_protinfo
)(
struct
rtnl_link
*,
106
struct
nlattr *,
void
*);
107
108
/** Called if a IFLA_AF_SPEC attribute needs to be parsed. Typically
109
* stores the parsed data in the address family specific buffer. */
110
int (*
ao_parse_af
)(
struct
rtnl_link
*,
111
struct
nlattr *,
void
*);
112
113
/** Called if a link message is sent to the kernel. Must append the
114
* link address family specific attributes to the message. */
115
int (*
ao_fill_af
)(
struct
rtnl_link
*,
116
struct
nl_msg *msg,
void
*);
117
118
/** Dump address family specific link attributes */
119
void (*
ao_dump
[NL_DUMP_MAX+1])(
struct
rtnl_link
*,
120
struct
nl_dump_params
*,
121
void
*);
122
};
123
124
extern
struct
rtnl_link_af_ops
*
rtnl_link_af_ops_lookup
(
unsigned
int
);
125
extern
void
rtnl_link_af_ops_put
(
struct
rtnl_link_af_ops
*);
126
extern
void
*
rtnl_link_af_alloc
(
struct
rtnl_link
*,
127
const
struct
rtnl_link_af_ops
*);
128
extern
void
*
rtnl_link_af_data
(
const
struct
rtnl_link
*,
129
const
struct
rtnl_link_af_ops
*);
130
extern
int
rtnl_link_af_register
(
struct
rtnl_link_af_ops
*);
131
extern
int
rtnl_link_af_unregister
(
struct
rtnl_link_af_ops
*);
132
133
134
#endif
include
netlink
route
link
api.h
Generated on Mon Apr 10 2017 18:00:42 for libnl by
1.8.1.2