xref: /netbsd-src/external/mpl/dhcp/dist/includes/inet.h (revision f407d9293b6650aa8c33d6a995f797bb6aaefd90)
1 /*	$NetBSD: inet.h,v 1.3 2022/04/03 01:10:58 christos Exp $	*/
2 
3 /* inet.h
4 
5    Portable definitions for internet addresses */
6 
7 /*
8  * Copyright (C) 2004-2022 Internet Systems Consortium, Inc. ("ISC")
9  * Copyright (c) 1996-2003 by Internet Software Consortium
10  *
11  * This Source Code Form is subject to the terms of the Mozilla Public
12  * License, v. 2.0. If a copy of the MPL was not distributed with this
13  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
16  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
18  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22  *
23  *   Internet Systems Consortium, Inc.
24  *   PO Box 360
25  *   Newmarket, NH 03857 USA
26  *   <info@isc.org>
27  *   https://www.isc.org/
28  *
29  */
30 
31 /* An internet address of up to 128 bits. */
32 
33 struct iaddr {
34 	unsigned len;
35 	unsigned char iabuf [16];
36 };
37 
38 struct iaddrlist {
39 	struct iaddrlist *next;
40 	struct iaddr addr;
41 };
42 
43 
44 /* struct iaddrmatch - used to compare a host IP against a subnet spec
45  *
46  * There is a space/speed tradeoff here implied by the use of a second
47  * struct iaddr to hold the mask; while using an unsigned (byte!) to
48  * represent the subnet prefix length would be more memory efficient,
49  * it makes run-time mask comparisons more expensive.  Since such
50  * entries are used currently only in restricted circumstances
51  * (wanting to reject a subnet), the decision is in favour of run-time
52  * efficiency.
53  */
54 
55 struct iaddrmatch {
56 	struct iaddr addr;
57 	struct iaddr mask;
58 };
59 
60 /* its list ... */
61 
62 struct iaddrmatchlist {
63 	struct iaddrmatchlist *next;
64 	struct iaddrmatch match;
65 };
66 
67 
68 /*
69  * Structure to store information about a CIDR network.
70  */
71 
72 struct iaddrcidrnet {
73 	struct iaddr lo_addr;
74 	int bits;
75 };
76 
77 struct iaddrcidrnetlist {
78 	struct iaddrcidrnetlist *next;
79 	struct iaddrcidrnet cidrnet;
80 };
81