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