xref: /minix3/external/bsd/dhcp/dist/includes/inet.h (revision 83ee113ee0d94f3844d44065af2311604e9a30ad)
1*83ee113eSDavid van Moolenbroek /*	$NetBSD: inet.h,v 1.1.1.3 2014/07/12 11:57:56 spz Exp $	*/
2*83ee113eSDavid van Moolenbroek /* inet.h
3*83ee113eSDavid van Moolenbroek 
4*83ee113eSDavid van Moolenbroek    Portable definitions for internet addresses */
5*83ee113eSDavid van Moolenbroek 
6*83ee113eSDavid van Moolenbroek /*
7*83ee113eSDavid van Moolenbroek  * Copyright (c) 2004,2007,2009,2014 by Internet Systems Consortium, Inc. ("ISC")
8*83ee113eSDavid van Moolenbroek  * Copyright (c) 1996-2003 by Internet Software Consortium
9*83ee113eSDavid van Moolenbroek  *
10*83ee113eSDavid van Moolenbroek  * Permission to use, copy, modify, and distribute this software for any
11*83ee113eSDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
12*83ee113eSDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
13*83ee113eSDavid van Moolenbroek  *
14*83ee113eSDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
15*83ee113eSDavid van Moolenbroek  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16*83ee113eSDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
17*83ee113eSDavid van Moolenbroek  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18*83ee113eSDavid van Moolenbroek  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19*83ee113eSDavid van Moolenbroek  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
20*83ee113eSDavid van Moolenbroek  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21*83ee113eSDavid van Moolenbroek  *
22*83ee113eSDavid van Moolenbroek  *   Internet Systems Consortium, Inc.
23*83ee113eSDavid van Moolenbroek  *   950 Charter Street
24*83ee113eSDavid van Moolenbroek  *   Redwood City, CA 94063
25*83ee113eSDavid van Moolenbroek  *   <info@isc.org>
26*83ee113eSDavid van Moolenbroek  *   https://www.isc.org/
27*83ee113eSDavid van Moolenbroek  *
28*83ee113eSDavid van Moolenbroek  */
29*83ee113eSDavid van Moolenbroek 
30*83ee113eSDavid van Moolenbroek /* An internet address of up to 128 bits. */
31*83ee113eSDavid van Moolenbroek 
32*83ee113eSDavid van Moolenbroek struct iaddr {
33*83ee113eSDavid van Moolenbroek 	unsigned len;
34*83ee113eSDavid van Moolenbroek 	unsigned char iabuf [16];
35*83ee113eSDavid van Moolenbroek };
36*83ee113eSDavid van Moolenbroek 
37*83ee113eSDavid van Moolenbroek struct iaddrlist {
38*83ee113eSDavid van Moolenbroek 	struct iaddrlist *next;
39*83ee113eSDavid van Moolenbroek 	struct iaddr addr;
40*83ee113eSDavid van Moolenbroek };
41*83ee113eSDavid van Moolenbroek 
42*83ee113eSDavid van Moolenbroek 
43*83ee113eSDavid van Moolenbroek /* struct iaddrmatch - used to compare a host IP against a subnet spec
44*83ee113eSDavid van Moolenbroek  *
45*83ee113eSDavid van Moolenbroek  * There is a space/speed tradeoff here implied by the use of a second
46*83ee113eSDavid van Moolenbroek  * struct iaddr to hold the mask; while using an unsigned (byte!) to
47*83ee113eSDavid van Moolenbroek  * represent the subnet prefix length would be more memory efficient,
48*83ee113eSDavid van Moolenbroek  * it makes run-time mask comparisons more expensive.  Since such
49*83ee113eSDavid van Moolenbroek  * entries are used currently only in restricted circumstances
50*83ee113eSDavid van Moolenbroek  * (wanting to reject a subnet), the decision is in favour of run-time
51*83ee113eSDavid van Moolenbroek  * efficiency.
52*83ee113eSDavid van Moolenbroek  */
53*83ee113eSDavid van Moolenbroek 
54*83ee113eSDavid van Moolenbroek struct iaddrmatch {
55*83ee113eSDavid van Moolenbroek 	struct iaddr addr;
56*83ee113eSDavid van Moolenbroek 	struct iaddr mask;
57*83ee113eSDavid van Moolenbroek };
58*83ee113eSDavid van Moolenbroek 
59*83ee113eSDavid van Moolenbroek /* its list ... */
60*83ee113eSDavid van Moolenbroek 
61*83ee113eSDavid van Moolenbroek struct iaddrmatchlist {
62*83ee113eSDavid van Moolenbroek 	struct iaddrmatchlist *next;
63*83ee113eSDavid van Moolenbroek 	struct iaddrmatch match;
64*83ee113eSDavid van Moolenbroek };
65*83ee113eSDavid van Moolenbroek 
66*83ee113eSDavid van Moolenbroek 
67*83ee113eSDavid van Moolenbroek /*
68*83ee113eSDavid van Moolenbroek  * Structure to store information about a CIDR network.
69*83ee113eSDavid van Moolenbroek  */
70*83ee113eSDavid van Moolenbroek 
71*83ee113eSDavid van Moolenbroek struct iaddrcidrnet {
72*83ee113eSDavid van Moolenbroek 	struct iaddr lo_addr;
73*83ee113eSDavid van Moolenbroek 	int bits;
74*83ee113eSDavid van Moolenbroek };
75*83ee113eSDavid van Moolenbroek 
76*83ee113eSDavid van Moolenbroek struct iaddrcidrnetlist {
77*83ee113eSDavid van Moolenbroek 	struct iaddrcidrnetlist *next;
78*83ee113eSDavid van Moolenbroek 	struct iaddrcidrnet cidrnet;
79*83ee113eSDavid van Moolenbroek };
80*83ee113eSDavid van Moolenbroek 
81