xref: /netbsd-src/external/mpl/dhcp/dist/client/client_tables.c (revision f407d9293b6650aa8c33d6a995f797bb6aaefd90)
1 /*	$NetBSD: client_tables.c,v 1.3 2022/04/03 01:10:57 christos Exp $	*/
2 
3 /* client_tables.c
4 
5    Tables of information only used by client... */
6 
7 /*
8  * Copyright (C) 2017-2022 Internet Systems Consortium, Inc. ("ISC")
9  *
10  * This Source Code Form is subject to the terms of the Mozilla Public
11  * License, v. 2.0. If a copy of the MPL was not distributed with this
12  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
15  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
17  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
20  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21  *
22  *   Internet Systems Consortium, Inc.
23  *   PO Box 360
24  *   Newmarket, NH 03857 USA
25  *   <info@isc.org>
26  *   https://www.isc.org/
27  *
28  */
29 
30 #include <sys/cdefs.h>
31 __RCSID("$NetBSD: client_tables.c,v 1.3 2022/04/03 01:10:57 christos Exp $");
32 
33 #include "dhcpd.h"
34 
35 struct universe client_universe;
36 static struct option client_options[] = {
37     /* @todo dummy-client-parm should be removed with the first real param */
38 	{ "dummy-client-parm", "T",		&client_universe,   1, 1 },
39 	{ NULL, NULL, NULL, 0, 0 }
40 };
41 
42 #define CLIENT_HASH_SIZE (2*(sizeof(client_options) / sizeof(struct option)))
43 
44 void initialize_client_option_spaces(void);
initialize_client_option_spaces(void)45 void initialize_client_option_spaces(void)
46 {
47 	int i;
48 
49 	/* Set up the client option universe... */
50 	client_universe.name = "client";
51 	client_universe.concat_duplicates = 0;
52 	client_universe.lookup_func = lookup_hashed_option;
53 	client_universe.option_state_dereference =
54 		hashed_option_state_dereference;
55 	client_universe.save_func = save_hashed_option;
56 	client_universe.delete_func = delete_hashed_option;
57 	client_universe.encapsulate = hashed_option_space_encapsulate;
58 	client_universe.foreach = hashed_option_space_foreach;
59 	client_universe.length_size = 1; /* Never used ... */
60 	client_universe.tag_size = 4;
61 	client_universe.store_tag = putUChar;
62 	client_universe.store_length = putUChar;
63 	client_universe.site_code_min = 0;
64 	client_universe.end = 0;
65 	client_universe.index = universe_count++;
66 	universes [client_universe.index] = &client_universe;
67 	if (!option_name_new_hash(&client_universe.name_hash,
68 				  CLIENT_HASH_SIZE, MDL) ||
69 	    !option_code_new_hash(&client_universe.code_hash,
70 				  CLIENT_HASH_SIZE, MDL))
71 		log_fatal ("Can't allocate client option hash table.");
72 	for (i = 0 ; client_options[i].name ; i++) {
73 		option_code_hash_add(client_universe.code_hash,
74 				     &client_options[i].code, 0,
75 				     &client_options[i], MDL);
76 		option_name_hash_add(client_universe.name_hash,
77 				     client_options[i].name, 0,
78 				     &client_options[i], MDL);
79 	}
80 
81 	/* Add the client option space to the option space hash. */
82 	universe_hash_add (universe_hash,
83 			   client_universe.name, 0, &client_universe, MDL);
84 
85 	/* Make the client universe the configuration option universe. */
86 	config_universe = &client_universe;
87 }
88