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