1 /*
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-2008 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 #include <netlink/cache-api.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 struct nl_cache;
26 
27 typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
28 
29 /* Access Functions */
30 extern int			nl_cache_nitems(struct nl_cache *);
31 extern int			nl_cache_nitems_filter(struct nl_cache *,
32 						       struct nl_object *);
33 extern struct nl_cache_ops *	nl_cache_get_ops(struct nl_cache *);
34 extern struct nl_object *	nl_cache_get_first(struct nl_cache *);
35 extern struct nl_object *	nl_cache_get_last(struct nl_cache *);
36 extern struct nl_object *	nl_cache_get_next(struct nl_object *);
37 extern struct nl_object *	nl_cache_get_prev(struct nl_object *);
38 
39 extern struct nl_cache *	nl_cache_alloc(struct nl_cache_ops *);
40 extern int			nl_cache_alloc_and_fill(struct nl_cache_ops *,
41 							struct nl_sock *,
42 							struct nl_cache **);
43 extern int			nl_cache_alloc_name(const char *,
44 						    struct nl_cache **);
45 extern struct nl_cache *	nl_cache_subset(struct nl_cache *,
46 						struct nl_object *);
47 extern void			nl_cache_clear(struct nl_cache *);
48 extern void			nl_cache_free(struct nl_cache *);
49 
50 /* Cache modification */
51 extern int			nl_cache_add(struct nl_cache *,
52 					     struct nl_object *);
53 extern int			nl_cache_parse_and_add(struct nl_cache *,
54 						       struct nl_msg *);
55 extern void			nl_cache_remove(struct nl_object *);
56 extern int			nl_cache_refill(struct nl_sock *,
57 						struct nl_cache *);
58 extern int			nl_cache_pickup(struct nl_sock *,
59 						struct nl_cache *);
60 extern int			nl_cache_resync(struct nl_sock *,
61 						struct nl_cache *,
62 						change_func_t,
63 						void *);
64 extern int			nl_cache_include(struct nl_cache *,
65 						 struct nl_object *,
66 						 change_func_t,
67 						 void *);
68 
69 /* General */
70 extern int			nl_cache_is_empty(struct nl_cache *);
71 extern void			nl_cache_mark_all(struct nl_cache *);
72 
73 /* Dumping */
74 extern void			nl_cache_dump(struct nl_cache *,
75 					      struct nl_dump_params *);
76 extern void			nl_cache_dump_filter(struct nl_cache *,
77 						     struct nl_dump_params *,
78 						     struct nl_object *);
79 
80 /* Iterators */
81 extern void			nl_cache_foreach(struct nl_cache *,
82 						 void (*cb)(struct nl_object *,
83 							    void *),
84 						 void *arg);
85 extern void			nl_cache_foreach_filter(struct nl_cache *,
86 							struct nl_object *,
87 							void (*cb)(struct
88 								   nl_object *,
89 								   void *),
90 							void *arg);
91 
92 /* --- cache management --- */
93 
94 /* Cache type management */
95 extern struct nl_cache_ops *	nl_cache_ops_lookup(const char *);
96 extern struct nl_cache_ops *	nl_cache_ops_associate(int, int);
97 extern struct nl_msgtype *	nl_msgtype_lookup(struct nl_cache_ops *, int);
98 extern void			nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *);
99 extern int			nl_cache_mngt_register(struct nl_cache_ops *);
100 extern int			nl_cache_mngt_unregister(struct nl_cache_ops *);
101 
102 /* Global cache provisioning/requiring */
103 extern void			nl_cache_mngt_provide(struct nl_cache *);
104 extern void			nl_cache_mngt_unprovide(struct nl_cache *);
105 extern struct nl_cache *	nl_cache_mngt_require(const char *);
106 
107 struct nl_cache_mngr;
108 
109 #define NL_AUTO_PROVIDE		1
110 
111 extern int			nl_cache_mngr_alloc(struct nl_sock *,
112 						    int, int,
113 						    struct nl_cache_mngr **);
114 extern int			nl_cache_mngr_add(struct nl_cache_mngr *,
115 						  const char *,
116 						  change_func_t,
117 						  void *,
118 						  struct nl_cache **);
119 extern int			nl_cache_mngr_get_fd(struct nl_cache_mngr *);
120 extern int			nl_cache_mngr_poll(struct nl_cache_mngr *,
121 						   int);
122 extern int			nl_cache_mngr_data_ready(struct nl_cache_mngr *);
123 extern void			nl_cache_mngr_free(struct nl_cache_mngr *);
124 
125 #ifdef __cplusplus
126 }
127 #endif
128 
129 #endif
130