1135446Strhodes/*
2193149Sdougb * Copyright (C) 2004-2007  Internet Systems Consortium, Inc. ("ISC")
3135446Strhodes * Copyright (C) 2000, 2001  Internet Software Consortium.
4135446Strhodes *
5193149Sdougb * Permission to use, copy, modify, and/or distribute this software for any
6135446Strhodes * purpose with or without fee is hereby granted, provided that the above
7135446Strhodes * copyright notice and this permission notice appear in all copies.
8135446Strhodes *
9135446Strhodes * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10135446Strhodes * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11135446Strhodes * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12135446Strhodes * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13135446Strhodes * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14135446Strhodes * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15135446Strhodes * PERFORMANCE OF THIS SOFTWARE.
16135446Strhodes */
17135446Strhodes
18234010Sdougb/* $Id: lwresd.h,v 1.19 2007/06/19 23:46:59 tbox Exp $ */
19135446Strhodes
20135446Strhodes#ifndef NAMED_LWRESD_H
21135446Strhodes#define NAMED_LWRESD_H 1
22135446Strhodes
23170222Sdougb/*! \file */
24170222Sdougb
25135446Strhodes#include <isc/types.h>
26135446Strhodes#include <isc/sockaddr.h>
27135446Strhodes
28135446Strhodes#include <isccfg/cfg.h>
29135446Strhodes
30135446Strhodes#include <dns/types.h>
31135446Strhodes
32135446Strhodesstruct ns_lwresd {
33135446Strhodes	unsigned int magic;
34135446Strhodes
35135446Strhodes	isc_mutex_t lock;
36135446Strhodes	dns_view_t *view;
37135446Strhodes	ns_lwsearchlist_t *search;
38135446Strhodes	unsigned int ndots;
39135446Strhodes	isc_mem_t *mctx;
40135446Strhodes	isc_boolean_t shutting_down;
41135446Strhodes	unsigned int refs;
42135446Strhodes};
43135446Strhodes
44135446Strhodesstruct ns_lwreslistener {
45135446Strhodes	unsigned int magic;
46135446Strhodes
47135446Strhodes	isc_mutex_t lock;
48135446Strhodes	isc_mem_t *mctx;
49135446Strhodes	isc_sockaddr_t address;
50135446Strhodes	ns_lwresd_t *manager;
51135446Strhodes	isc_socket_t *sock;
52135446Strhodes	unsigned int refs;
53135446Strhodes	ISC_LIST(ns_lwdclientmgr_t) cmgrs;
54135446Strhodes	ISC_LINK(ns_lwreslistener_t) link;
55135446Strhodes};
56135446Strhodes
57170222Sdougb/*%
58135446Strhodes * Configure lwresd.
59135446Strhodes */
60135446Strhodesisc_result_t
61165071Sdougbns_lwresd_configure(isc_mem_t *mctx, const cfg_obj_t *config);
62135446Strhodes
63135446Strhodesisc_result_t
64135446Strhodesns_lwresd_parseeresolvconf(isc_mem_t *mctx, cfg_parser_t *pctx,
65135446Strhodes			   cfg_obj_t **configp);
66135446Strhodes
67170222Sdougb/*%
68135446Strhodes * Trigger shutdown.
69135446Strhodes */
70135446Strhodesvoid
71135446Strhodesns_lwresd_shutdown(void);
72135446Strhodes
73135446Strhodes/*
74135446Strhodes * Manager functions
75135446Strhodes */
76170222Sdougb/*% create manager */
77135446Strhodesisc_result_t
78165071Sdougbns_lwdmanager_create(isc_mem_t *mctx, const cfg_obj_t *lwres,
79165071Sdougb		      ns_lwresd_t **lwresdp);
80135446Strhodes
81170222Sdougb/*% attach to manager */
82135446Strhodesvoid
83135446Strhodesns_lwdmanager_attach(ns_lwresd_t *source, ns_lwresd_t **targetp);
84135446Strhodes
85170222Sdougb/*% detach from manager */
86135446Strhodesvoid
87135446Strhodesns_lwdmanager_detach(ns_lwresd_t **lwresdp);
88135446Strhodes
89135446Strhodes/*
90135446Strhodes * Listener functions
91135446Strhodes */
92170222Sdougb/*% attach to listener */
93135446Strhodesvoid
94135446Strhodesns_lwreslistener_attach(ns_lwreslistener_t *source,
95135446Strhodes			ns_lwreslistener_t **targetp);
96135446Strhodes
97170222Sdougb/*% detach from lister */
98135446Strhodesvoid
99135446Strhodesns_lwreslistener_detach(ns_lwreslistener_t **listenerp);
100135446Strhodes
101170222Sdougb/*% link client manager */
102135446Strhodesvoid
103135446Strhodesns_lwreslistener_unlinkcm(ns_lwreslistener_t *listener, ns_lwdclientmgr_t *cm);
104135446Strhodes
105170222Sdougb/*% unlink client manager */
106135446Strhodesvoid
107135446Strhodesns_lwreslistener_linkcm(ns_lwreslistener_t *listener, ns_lwdclientmgr_t *cm);
108135446Strhodes
109135446Strhodes
110135446Strhodes
111135446Strhodes
112135446Strhodes/*
113135446Strhodes * INTERNAL FUNCTIONS.
114135446Strhodes */
115135446Strhodesvoid *
116135446Strhodesns__lwresd_memalloc(void *arg, size_t size);
117135446Strhodes
118135446Strhodesvoid
119135446Strhodesns__lwresd_memfree(void *arg, void *mem, size_t size);
120135446Strhodes
121135446Strhodes#endif /* NAMED_LWRESD_H */
122