blob: e21aa1c6b36cf91ff60526843d38f2802d523a35 [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001/*
2 * netlink/cache.h Caching Module
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_CACHE_H_
13#define NETLINK_CACHE_H_
14
15#include <netlink/netlink.h>
16#include <netlink/msg.h>
17#include <netlink/utils.h>
18#include <netlink/object.h>
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24enum {
25 NL_ACT_UNSPEC,
26 NL_ACT_NEW,
27 NL_ACT_DEL,
28 NL_ACT_GET,
29 NL_ACT_SET,
30 NL_ACT_CHANGE,
31 __NL_ACT_MAX,
32};
33
34#define NL_ACT_MAX (__NL_ACT_MAX - 1)
35
36struct nl_cache;
37typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
38
39/**
40 * @ingroup cache
41 * Explicitely iterate over all address families when updating the cache
42 */
43#define NL_CACHE_AF_ITER 0x0001
44
45/* Access Functions */
46extern int nl_cache_nitems(struct nl_cache *);
47extern int nl_cache_nitems_filter(struct nl_cache *,
48 struct nl_object *);
49extern struct nl_cache_ops * nl_cache_get_ops(struct nl_cache *);
50extern struct nl_object * nl_cache_get_first(struct nl_cache *);
51extern struct nl_object * nl_cache_get_last(struct nl_cache *);
52extern struct nl_object * nl_cache_get_next(struct nl_object *);
53extern struct nl_object * nl_cache_get_prev(struct nl_object *);
54
55extern struct nl_cache * nl_cache_alloc(struct nl_cache_ops *);
56extern int nl_cache_alloc_and_fill(struct nl_cache_ops *,
57 struct nl_sock *,
58 struct nl_cache **);
59extern int nl_cache_alloc_name(const char *,
60 struct nl_cache **);
61extern struct nl_cache * nl_cache_subset(struct nl_cache *,
62 struct nl_object *);
63extern struct nl_cache * nl_cache_clone(struct nl_cache *);
64extern void nl_cache_clear(struct nl_cache *);
65extern void nl_cache_get(struct nl_cache *);
66extern void nl_cache_free(struct nl_cache *);
67extern void nl_cache_put(struct nl_cache *cache);
68
69/* Cache modification */
70extern int nl_cache_add(struct nl_cache *,
71 struct nl_object *);
72extern int nl_cache_parse_and_add(struct nl_cache *,
73 struct nl_msg *);
74extern int nl_cache_move(struct nl_cache *,
75 struct nl_object *);
76extern void nl_cache_remove(struct nl_object *);
77extern int nl_cache_refill(struct nl_sock *,
78 struct nl_cache *);
79extern int nl_cache_pickup(struct nl_sock *,
80 struct nl_cache *);
81extern int nl_cache_resync(struct nl_sock *,
82 struct nl_cache *,
83 change_func_t,
84 void *);
85extern int nl_cache_include(struct nl_cache *,
86 struct nl_object *,
87 change_func_t,
88 void *);
89extern void nl_cache_set_arg1(struct nl_cache *, int);
90extern void nl_cache_set_arg2(struct nl_cache *, int);
91extern void nl_cache_set_flags(struct nl_cache *, unsigned int);
92
93/* General */
94extern int nl_cache_is_empty(struct nl_cache *);
95extern struct nl_object * nl_cache_search(struct nl_cache *,
96 struct nl_object *);
97extern struct nl_object *nl_cache_find(struct nl_cache *,
98 struct nl_object *);
99extern void nl_cache_mark_all(struct nl_cache *);
100
101/* Dumping */
102extern void nl_cache_dump(struct nl_cache *,
103 struct nl_dump_params *);
104extern void nl_cache_dump_filter(struct nl_cache *,
105 struct nl_dump_params *,
106 struct nl_object *);
107
108/* Iterators */
109extern void nl_cache_foreach(struct nl_cache *,
110 void (*cb)(struct nl_object *,
111 void *),
112 void *arg);
113extern void nl_cache_foreach_filter(struct nl_cache *,
114 struct nl_object *,
115 void (*cb)(struct
116 nl_object *,
117 void *),
118 void *arg);
119
120/* --- cache management --- */
121
122/* Cache type management */
123extern struct nl_cache_ops * nl_cache_ops_lookup(const char *);
124extern struct nl_cache_ops * nl_cache_ops_lookup_safe(const char *);
125extern struct nl_cache_ops * nl_cache_ops_associate(int, int);
126extern struct nl_cache_ops * nl_cache_ops_associate_safe(int, int);
127extern struct nl_msgtype * nl_msgtype_lookup(struct nl_cache_ops *, int);
128extern void nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *);
129extern int nl_cache_mngt_register(struct nl_cache_ops *);
130extern int nl_cache_mngt_unregister(struct nl_cache_ops *);
131
132/* Global cache provisioning/requiring */
133extern void nl_cache_mngt_provide(struct nl_cache *);
134extern void nl_cache_mngt_unprovide(struct nl_cache *);
135extern struct nl_cache * nl_cache_mngt_require(const char *);
136extern struct nl_cache * nl_cache_mngt_require_safe(const char *);
137extern struct nl_cache * __nl_cache_mngt_require(const char *);
138
139struct nl_cache_mngr;
140
141#define NL_AUTO_PROVIDE 1
142#define NL_ALLOCATED_SOCK 2 /* For internal use only, do not use */
143
144extern int nl_cache_mngr_alloc(struct nl_sock *,
145 int, int,
146 struct nl_cache_mngr **);
147extern int nl_cache_mngr_add(struct nl_cache_mngr *,
148 const char *,
149 change_func_t,
150 void *,
151 struct nl_cache **);
152extern int nl_cache_mngr_add_cache(struct nl_cache_mngr *mngr,
153 struct nl_cache *cache,
154 change_func_t cb, void *data);
155extern int nl_cache_mngr_get_fd(struct nl_cache_mngr *);
156extern int nl_cache_mngr_poll(struct nl_cache_mngr *,
157 int);
158extern int nl_cache_mngr_data_ready(struct nl_cache_mngr *);
159extern void nl_cache_mngr_info(struct nl_cache_mngr *,
160 struct nl_dump_params *);
161extern void nl_cache_mngr_free(struct nl_cache_mngr *);
162
163extern void nl_cache_ops_get(struct nl_cache_ops *);
164extern void nl_cache_ops_put(struct nl_cache_ops *);
165
166#ifdef __cplusplus
167}
168#endif
169
170#endif