Home | History | Annotate | Download | only in netlink
      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 (at) 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