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
33struct iaddr {
34	unsigned len;
35	unsigned char iabuf [16];
36};
37
38struct 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
55struct iaddrmatch {
56	struct iaddr addr;
57	struct iaddr mask;
58};
59
60/* its list ... */
61
62struct iaddrmatchlist {
63	struct iaddrmatchlist *next;
64	struct iaddrmatch match;
65};
66
67
68/*
69 * Structure to store information about a CIDR network.
70 */
71
72struct iaddrcidrnet {
73	struct iaddr lo_addr;
74	int bits;
75};
76
77struct iaddrcidrnetlist {
78	struct iaddrcidrnetlist *next;
79	struct iaddrcidrnet cidrnet;
80};
81