1 /* 2 * validator/val_kcache.h - validator key shared cache with validated keys 3 * 4 * Copyright (c) 2007, NLnet Labs. All rights reserved. 5 * 6 * This software is open source. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * 15 * Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 19 * Neither the name of the NLNET LABS nor the names of its contributors may 20 * be used to endorse or promote products derived from this software without 21 * specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 27 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 29 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36 /** 37 * \file 38 * 39 * This file contains functions for caching validated key entries. 40 */ 41 42 #ifndef VALIDATOR_VAL_KCACHE_H 43 #define VALIDATOR_VAL_KCACHE_H 44 #include "util/storage/slabhash.h" 45 struct key_entry_key; 46 struct key_entry_data; 47 struct config_file; 48 struct regional; 49 struct module_qstate; 50 51 /** 52 * Key cache 53 */ 54 struct key_cache { 55 /** uses slabhash for storage, type key_entry_key, key_entry_data */ 56 struct slabhash* slab; 57 }; 58 59 /** 60 * Create the key cache 61 * @param cfg: config settings for the key cache. 62 * @return new key cache or NULL on malloc failure. 63 */ 64 struct key_cache* key_cache_create(struct config_file* cfg); 65 66 /** 67 * Delete the key cache 68 * @param kcache: to delete 69 */ 70 void key_cache_delete(struct key_cache* kcache); 71 72 /** 73 * Insert or update a key cache entry. Note that the insert may silently 74 * fail if there is not enough memory. 75 * 76 * @param kcache: the key cache. 77 * @param kkey: key entry key, assumed malloced in a region, is copied 78 * to perform update or insertion. Its data pointer is also copied. 79 * @param qstate: store errinf reason in case its bad. 80 */ 81 void key_cache_insert(struct key_cache* kcache, struct key_entry_key* kkey, 82 struct module_qstate* qstate); 83 84 /** 85 * Remove an entry from the key cache. 86 * @param kcache: the key cache. 87 * @param name: for what name to look; uncompressed wireformat 88 * @param namelen: length of the name. 89 * @param key_class: class of the key. 90 */ 91 void key_cache_remove(struct key_cache* kcache, 92 uint8_t* name, size_t namelen, uint16_t key_class); 93 94 /** 95 * Lookup key entry in the cache. Looks up the closest key entry above the 96 * given name. 97 * @param kcache: the key cache. 98 * @param name: for what name to look; uncompressed wireformat 99 * @param namelen: length of the name. 100 * @param key_class: class of the key. 101 * @param region: a copy of the key_entry is allocated in this region. 102 * @param now: current time. 103 * @return pointer to a newly allocated key_entry copy in the region, if 104 * a key entry could be found, and allocation succeeded and TTL was OK. 105 * Otherwise, NULL is returned. 106 */ 107 struct key_entry_key* key_cache_obtain(struct key_cache* kcache, 108 uint8_t* name, size_t namelen, uint16_t key_class, 109 struct regional* region, time_t now); 110 111 /** 112 * Get memory in use by the key cache. 113 * @param kcache: the key cache. 114 * @return memory in use in bytes. 115 */ 116 size_t key_cache_get_mem(struct key_cache* kcache); 117 118 #endif /* VALIDATOR_VAL_KCACHE_H */ 119