1/*	$NetBSD: fixedname.h,v 1.3.6.1 2012/06/05 21:14:55 bouyer Exp $	*/
2
3/*
4 * Copyright (C) 2004-2007  Internet Systems Consortium, Inc. ("ISC")
5 * Copyright (C) 1999-2001  Internet Software Consortium.
6 *
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13 * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19
20/* Id: fixedname.h,v 1.19 2007/06/19 23:47:16 tbox Exp  */
21
22#ifndef DNS_FIXEDNAME_H
23#define DNS_FIXEDNAME_H 1
24
25/*****
26 ***** Module Info
27 *****/
28
29/*! \file dns/fixedname.h
30 * \brief
31 * Fixed-size Names
32 *
33 * dns_fixedname_t is a convenience type containing a name, an offsets table,
34 * and a dedicated buffer big enough for the longest possible name.
35 *
36 * MP:
37 *\li	The caller must ensure any required synchronization.
38 *
39 * Reliability:
40 *\li	No anticipated impact.
41 *
42 * Resources:
43 *\li	Per dns_fixedname_t:
44 *\code
45 *		sizeof(dns_name_t) + sizeof(dns_offsets_t) +
46 *		sizeof(isc_buffer_t) + 255 bytes + structure padding
47 *\endcode
48 *
49 * Security:
50 *\li	No anticipated impact.
51 *
52 * Standards:
53 *\li	None.
54 */
55
56/*****
57 ***** Imports
58 *****/
59
60#include <isc/buffer.h>
61
62#include <dns/name.h>
63
64/*****
65 ***** Types
66 *****/
67
68struct dns_fixedname {
69	dns_name_t			name;
70	dns_offsets_t			offsets;
71	isc_buffer_t			buffer;
72	unsigned char			data[DNS_NAME_MAXWIRE];
73};
74
75#define dns_fixedname_init(fn) \
76	do { \
77		dns_name_init(&((fn)->name), (fn)->offsets); \
78		isc_buffer_init(&((fn)->buffer), (fn)->data, \
79                                  DNS_NAME_MAXWIRE); \
80		dns_name_setbuffer(&((fn)->name), &((fn)->buffer)); \
81	} while (/*CONSTCOND*/0)
82
83#define dns_fixedname_invalidate(fn) \
84	dns_name_invalidate(&((fn)->name))
85
86#define dns_fixedname_name(fn)		(&((fn)->name))
87
88#endif /* DNS_FIXEDNAME_H */
89