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