1 /* 2 * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 * 4 * This Source Code Form is subject to the terms of the Mozilla Public 5 * License, v. 2.0. If a copy of the MPL was not distributed with this 6 * file, you can obtain one at https://mozilla.org/MPL/2.0/. 7 * 8 * See the COPYRIGHT file distributed with this work for additional 9 * information regarding copyright ownership. 10 */ 11 12 #ifndef NAMED_LWRESD_H 13 #define NAMED_LWRESD_H 1 14 15 /*! \file */ 16 17 #include <isc/types.h> 18 #include <isc/sockaddr.h> 19 20 #include <isccfg/cfg.h> 21 22 #include <dns/types.h> 23 24 struct ns_lwresd { 25 unsigned int magic; 26 27 isc_mutex_t lock; 28 dns_view_t *view; 29 ns_lwsearchlist_t *search; 30 unsigned int ndots; 31 unsigned int ntasks; 32 unsigned int nclients; 33 isc_mem_t *mctx; 34 bool shutting_down; 35 unsigned int refs; 36 }; 37 38 struct ns_lwreslistener { 39 unsigned int magic; 40 41 isc_mutex_t lock; 42 isc_mem_t *mctx; 43 isc_sockaddr_t address; 44 ns_lwresd_t *manager; 45 isc_socket_t *sock; 46 unsigned int refs; 47 ISC_LIST(ns_lwdclientmgr_t) cmgrs; 48 ISC_LINK(ns_lwreslistener_t) link; 49 }; 50 51 /*% 52 * Configure lwresd. 53 */ 54 isc_result_t 55 ns_lwresd_configure(isc_mem_t *mctx, const cfg_obj_t *config); 56 57 isc_result_t 58 ns_lwresd_parseeresolvconf(isc_mem_t *mctx, cfg_parser_t *pctx, 59 cfg_obj_t **configp); 60 61 /*% 62 * Trigger shutdown. 63 */ 64 void 65 ns_lwresd_shutdown(void); 66 67 /* 68 * Manager functions 69 */ 70 /*% create manager */ 71 isc_result_t 72 ns_lwdmanager_create(isc_mem_t *mctx, const cfg_obj_t *lwres, 73 ns_lwresd_t **lwresdp); 74 75 /*% attach to manager */ 76 void 77 ns_lwdmanager_attach(ns_lwresd_t *source, ns_lwresd_t **targetp); 78 79 /*% detach from manager */ 80 void 81 ns_lwdmanager_detach(ns_lwresd_t **lwresdp); 82 83 /* 84 * Listener functions 85 */ 86 /*% attach to listener */ 87 void 88 ns_lwreslistener_attach(ns_lwreslistener_t *source, 89 ns_lwreslistener_t **targetp); 90 91 /*% detach from lister */ 92 void 93 ns_lwreslistener_detach(ns_lwreslistener_t **listenerp); 94 95 /*% link client manager */ 96 void 97 ns_lwreslistener_unlinkcm(ns_lwreslistener_t *listener, ns_lwdclientmgr_t *cm); 98 99 /*% unlink client manager */ 100 void 101 ns_lwreslistener_linkcm(ns_lwreslistener_t *listener, ns_lwdclientmgr_t *cm); 102 103 104 105 106 /* 107 * INTERNAL FUNCTIONS. 108 */ 109 void * 110 ns__lwresd_memalloc(void *arg, size_t size); 111 112 void 113 ns__lwresd_memfree(void *arg, void *mem, size_t size); 114 115 #endif /* NAMED_LWRESD_H */ 116