144d362409d5469aed47d19e7908d19bd194493aThomas Graf/* 244d362409d5469aed47d19e7908d19bd194493aThomas Graf * netlink/cache.h Caching Module 344d362409d5469aed47d19e7908d19bd194493aThomas Graf * 444d362409d5469aed47d19e7908d19bd194493aThomas Graf * This library is free software; you can redistribute it and/or 544d362409d5469aed47d19e7908d19bd194493aThomas Graf * modify it under the terms of the GNU Lesser General Public 644d362409d5469aed47d19e7908d19bd194493aThomas Graf * License as published by the Free Software Foundation version 2.1 744d362409d5469aed47d19e7908d19bd194493aThomas Graf * of the License. 844d362409d5469aed47d19e7908d19bd194493aThomas Graf * 98a3efffa5b3fde252675239914118664d36a2c24Thomas Graf * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch> 1044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 1144d362409d5469aed47d19e7908d19bd194493aThomas Graf 1244d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef NETLINK_CACHE_H_ 1344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NETLINK_CACHE_H_ 1444d362409d5469aed47d19e7908d19bd194493aThomas Graf 1544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/netlink.h> 1644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/msg.h> 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/utils.h> 1844d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/object.h> 19d36d396fd0ae94aa2269546a02b5973b4ec27775Thomas Graf#include <netlink/cache-api.h> 2044d362409d5469aed47d19e7908d19bd194493aThomas Graf 2144d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifdef __cplusplus 2244d362409d5469aed47d19e7908d19bd194493aThomas Grafextern "C" { 2344d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif 2444d362409d5469aed47d19e7908d19bd194493aThomas Graf 2544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache; 2644d362409d5469aed47d19e7908d19bd194493aThomas Graf 274ab22ccd47319e7d9a972bcf018e1a03870f64f0Andreas Fetttypedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *); 2844d362409d5469aed47d19e7908d19bd194493aThomas Graf 2944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Access Functions */ 3044d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_nitems(struct nl_cache *); 3144d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_nitems_filter(struct nl_cache *, 3244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_object *); 3344d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_cache_ops * nl_cache_get_ops(struct nl_cache *); 3444d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_object * nl_cache_get_first(struct nl_cache *); 3544d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_object * nl_cache_get_last(struct nl_cache *); 3644d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_object * nl_cache_get_next(struct nl_object *); 3744d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_object * nl_cache_get_prev(struct nl_object *); 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf 3944d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_cache * nl_cache_alloc(struct nl_cache_ops *); 408a3efffa5b3fde252675239914118664d36a2c24Thomas Grafextern int nl_cache_alloc_and_fill(struct nl_cache_ops *, 411155370f520cb64657e25153255cf7dc1424317fThomas Graf struct nl_sock *, 428a3efffa5b3fde252675239914118664d36a2c24Thomas Graf struct nl_cache **); 438a3efffa5b3fde252675239914118664d36a2c24Thomas Grafextern int nl_cache_alloc_name(const char *, 448a3efffa5b3fde252675239914118664d36a2c24Thomas Graf struct nl_cache **); 4544d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_cache * nl_cache_subset(struct nl_cache *, 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_object *); 4744d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_clear(struct nl_cache *); 4844d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_free(struct nl_cache *); 4944d362409d5469aed47d19e7908d19bd194493aThomas Graf 5044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Cache modification */ 5144d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_add(struct nl_cache *, 5244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_object *); 5344d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_parse_and_add(struct nl_cache *, 5444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_msg *); 5544d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_remove(struct nl_object *); 561155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int nl_cache_refill(struct nl_sock *, 5744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache *); 581155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int nl_cache_pickup(struct nl_sock *, 5944d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache *); 601155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int nl_cache_resync(struct nl_sock *, 6144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache *, 624ab22ccd47319e7d9a972bcf018e1a03870f64f0Andreas Fett change_func_t, 634ab22ccd47319e7d9a972bcf018e1a03870f64f0Andreas Fett void *); 6444d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_include(struct nl_cache *, 6544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_object *, 664ab22ccd47319e7d9a972bcf018e1a03870f64f0Andreas Fett change_func_t, 674ab22ccd47319e7d9a972bcf018e1a03870f64f0Andreas Fett void *); 6844d362409d5469aed47d19e7908d19bd194493aThomas Graf 6944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* General */ 7044d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_is_empty(struct nl_cache *); 7144d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_mark_all(struct nl_cache *); 7244d362409d5469aed47d19e7908d19bd194493aThomas Graf 7344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Dumping */ 7444d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_dump(struct nl_cache *, 7544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_dump_params *); 7644d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_dump_filter(struct nl_cache *, 7744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_dump_params *, 7844d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_object *); 7944d362409d5469aed47d19e7908d19bd194493aThomas Graf 8044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Iterators */ 8144d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_foreach(struct nl_cache *, 8244d362409d5469aed47d19e7908d19bd194493aThomas Graf void (*cb)(struct nl_object *, 8344d362409d5469aed47d19e7908d19bd194493aThomas Graf void *), 8444d362409d5469aed47d19e7908d19bd194493aThomas Graf void *arg); 8544d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_foreach_filter(struct nl_cache *, 8644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_object *, 8744d362409d5469aed47d19e7908d19bd194493aThomas Graf void (*cb)(struct 8844d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_object *, 8944d362409d5469aed47d19e7908d19bd194493aThomas Graf void *), 9044d362409d5469aed47d19e7908d19bd194493aThomas Graf void *arg); 9144d362409d5469aed47d19e7908d19bd194493aThomas Graf 9244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* --- cache management --- */ 9344d362409d5469aed47d19e7908d19bd194493aThomas Graf 9444d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Cache type management */ 9544d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_cache_ops * nl_cache_ops_lookup(const char *); 96d36d396fd0ae94aa2269546a02b5973b4ec27775Thomas Grafextern struct nl_cache_ops * nl_cache_ops_associate(int, int); 97d36d396fd0ae94aa2269546a02b5973b4ec27775Thomas Grafextern struct nl_msgtype * nl_msgtype_lookup(struct nl_cache_ops *, int); 98d36d396fd0ae94aa2269546a02b5973b4ec27775Thomas Grafextern void nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *); 9944d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_mngt_register(struct nl_cache_ops *); 10044d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_mngt_unregister(struct nl_cache_ops *); 10144d362409d5469aed47d19e7908d19bd194493aThomas Graf 10244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Global cache provisioning/requiring */ 10344d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_mngt_provide(struct nl_cache *); 10444d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_mngt_unprovide(struct nl_cache *); 10544d362409d5469aed47d19e7908d19bd194493aThomas Grafextern struct nl_cache * nl_cache_mngt_require(const char *); 10644d362409d5469aed47d19e7908d19bd194493aThomas Graf 10744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache_mngr; 10844d362409d5469aed47d19e7908d19bd194493aThomas Graf 10944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_AUTO_PROVIDE 1 11044d362409d5469aed47d19e7908d19bd194493aThomas Graf 1111155370f520cb64657e25153255cf7dc1424317fThomas Grafextern int nl_cache_mngr_alloc(struct nl_sock *, 1128a3efffa5b3fde252675239914118664d36a2c24Thomas Graf int, int, 1138a3efffa5b3fde252675239914118664d36a2c24Thomas Graf struct nl_cache_mngr **); 1148a3efffa5b3fde252675239914118664d36a2c24Thomas Grafextern int nl_cache_mngr_add(struct nl_cache_mngr *, 11544d362409d5469aed47d19e7908d19bd194493aThomas Graf const char *, 1168a3efffa5b3fde252675239914118664d36a2c24Thomas Graf change_func_t, 1174ab22ccd47319e7d9a972bcf018e1a03870f64f0Andreas Fett void *, 1188a3efffa5b3fde252675239914118664d36a2c24Thomas Graf struct nl_cache **); 11944d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_mngr_get_fd(struct nl_cache_mngr *); 12044d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_mngr_poll(struct nl_cache_mngr *, 12144d362409d5469aed47d19e7908d19bd194493aThomas Graf int); 12244d362409d5469aed47d19e7908d19bd194493aThomas Grafextern int nl_cache_mngr_data_ready(struct nl_cache_mngr *); 12344d362409d5469aed47d19e7908d19bd194493aThomas Grafextern void nl_cache_mngr_free(struct nl_cache_mngr *); 12444d362409d5469aed47d19e7908d19bd194493aThomas Graf 12544d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifdef __cplusplus 12644d362409d5469aed47d19e7908d19bd194493aThomas Graf} 12744d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif 12844d362409d5469aed47d19e7908d19bd194493aThomas Graf 12944d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif 130