1*86d7f5d3SJohn Marino /*- 2*86d7f5d3SJohn Marino * Copyright (c) 2001 Brian Somers <brian@Awfulhak.org> 3*86d7f5d3SJohn Marino * All rights reserved. 4*86d7f5d3SJohn Marino * 5*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 6*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 7*86d7f5d3SJohn Marino * are met: 8*86d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 9*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 10*86d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 11*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 12*86d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 13*86d7f5d3SJohn Marino * 14*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*86d7f5d3SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*86d7f5d3SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*86d7f5d3SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*86d7f5d3SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*86d7f5d3SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*86d7f5d3SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*86d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*86d7f5d3SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*86d7f5d3SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*86d7f5d3SJohn Marino * SUCH DAMAGE. 25*86d7f5d3SJohn Marino * 26*86d7f5d3SJohn Marino * $FreeBSD: src/usr.sbin/ppp/ncpaddr.h,v 1.3.2.1 2002/09/01 02:12:29 brian Exp $ 27*86d7f5d3SJohn Marino * $DragonFly: src/usr.sbin/ppp/ncpaddr.h,v 1.2 2003/06/17 04:30:00 dillon Exp $ 28*86d7f5d3SJohn Marino */ 29*86d7f5d3SJohn Marino 30*86d7f5d3SJohn Marino /* 31*86d7f5d3SJohn Marino * These structures should be treated as opaque. 32*86d7f5d3SJohn Marino */ 33*86d7f5d3SJohn Marino struct ncprange { 34*86d7f5d3SJohn Marino sa_family_t ncprange_family; 35*86d7f5d3SJohn Marino union { 36*86d7f5d3SJohn Marino struct { 37*86d7f5d3SJohn Marino struct in_addr ipaddr; 38*86d7f5d3SJohn Marino struct in_addr mask; 39*86d7f5d3SJohn Marino int width; 40*86d7f5d3SJohn Marino } ip4; 41*86d7f5d3SJohn Marino #ifndef NOINET6 42*86d7f5d3SJohn Marino struct { 43*86d7f5d3SJohn Marino struct in6_addr ipaddr; 44*86d7f5d3SJohn Marino int width; 45*86d7f5d3SJohn Marino } ip6; 46*86d7f5d3SJohn Marino #endif 47*86d7f5d3SJohn Marino } u; 48*86d7f5d3SJohn Marino }; 49*86d7f5d3SJohn Marino 50*86d7f5d3SJohn Marino struct ncpaddr { 51*86d7f5d3SJohn Marino sa_family_t ncpaddr_family; 52*86d7f5d3SJohn Marino union { 53*86d7f5d3SJohn Marino struct in_addr ip4addr; 54*86d7f5d3SJohn Marino #ifndef NOINET6 55*86d7f5d3SJohn Marino struct in6_addr ip6addr; 56*86d7f5d3SJohn Marino #endif 57*86d7f5d3SJohn Marino } u; 58*86d7f5d3SJohn Marino }; 59*86d7f5d3SJohn Marino 60*86d7f5d3SJohn Marino struct ncp; 61*86d7f5d3SJohn Marino 62*86d7f5d3SJohn Marino extern void ncpaddr_init(struct ncpaddr *); 63*86d7f5d3SJohn Marino extern int ncpaddr_isset(const struct ncpaddr *); 64*86d7f5d3SJohn Marino extern int ncpaddr_isdefault(const struct ncpaddr *); 65*86d7f5d3SJohn Marino extern int ncpaddr_equal(const struct ncpaddr *, const struct ncpaddr *); 66*86d7f5d3SJohn Marino extern void ncpaddr_copy(struct ncpaddr *, const struct ncpaddr *); 67*86d7f5d3SJohn Marino extern void ncpaddr_setip4addr(struct ncpaddr *, u_int32_t); 68*86d7f5d3SJohn Marino extern int ncpaddr_getip4addr(const struct ncpaddr *, u_int32_t *); 69*86d7f5d3SJohn Marino extern void ncpaddr_setip4(struct ncpaddr *, struct in_addr); 70*86d7f5d3SJohn Marino extern int ncpaddr_getip4(const struct ncpaddr *, struct in_addr *); 71*86d7f5d3SJohn Marino #ifndef NOINET6 72*86d7f5d3SJohn Marino extern void ncpaddr_setip6(struct ncpaddr *, const struct in6_addr *); 73*86d7f5d3SJohn Marino extern int ncpaddr_getip6(const struct ncpaddr *, struct in6_addr *); 74*86d7f5d3SJohn Marino #endif 75*86d7f5d3SJohn Marino extern void ncpaddr_getsa(const struct ncpaddr *, struct sockaddr_storage *); 76*86d7f5d3SJohn Marino extern void ncpaddr_setsa(struct ncpaddr *, const struct sockaddr *); 77*86d7f5d3SJohn Marino extern const char *ncpaddr_ntoa(const struct ncpaddr *); 78*86d7f5d3SJohn Marino extern int ncpaddr_aton(struct ncpaddr *, struct ncp *, const char *); 79*86d7f5d3SJohn Marino 80*86d7f5d3SJohn Marino extern void ncprange_init(struct ncprange *); 81*86d7f5d3SJohn Marino extern int ncprange_isset(const struct ncprange *); 82*86d7f5d3SJohn Marino extern int ncprange_equal(const struct ncprange *, const struct ncprange *); 83*86d7f5d3SJohn Marino extern int ncprange_isdefault(const struct ncprange *); 84*86d7f5d3SJohn Marino extern void ncprange_setdefault(struct ncprange *, int); 85*86d7f5d3SJohn Marino extern int ncprange_contains(const struct ncprange *, const struct ncpaddr *); 86*86d7f5d3SJohn Marino extern int ncprange_containsip4(const struct ncprange *, struct in_addr); 87*86d7f5d3SJohn Marino extern void ncprange_copy(struct ncprange *, const struct ncprange *); 88*86d7f5d3SJohn Marino extern void ncprange_set(struct ncprange *, const struct ncpaddr *, int); 89*86d7f5d3SJohn Marino extern void ncprange_sethost(struct ncprange *, const struct ncpaddr *); 90*86d7f5d3SJohn Marino extern int ncprange_ishost(const struct ncprange *); 91*86d7f5d3SJohn Marino extern int ncprange_setwidth(struct ncprange *, int); 92*86d7f5d3SJohn Marino extern void ncprange_setip4(struct ncprange *, struct in_addr, struct in_addr); 93*86d7f5d3SJohn Marino extern void ncprange_setip4host(struct ncprange *, struct in_addr); 94*86d7f5d3SJohn Marino extern int ncprange_setip4mask(struct ncprange *, struct in_addr); 95*86d7f5d3SJohn Marino extern void ncprange_setsa(struct ncprange *, const struct sockaddr *, 96*86d7f5d3SJohn Marino const struct sockaddr *); 97*86d7f5d3SJohn Marino extern void ncprange_getsa(const struct ncprange *, struct sockaddr_storage *, 98*86d7f5d3SJohn Marino struct sockaddr_storage *); 99*86d7f5d3SJohn Marino extern int ncprange_getaddr(const struct ncprange *, struct ncpaddr *); 100*86d7f5d3SJohn Marino extern int ncprange_getip4addr(const struct ncprange *, struct in_addr *); 101*86d7f5d3SJohn Marino extern int ncprange_getip4mask(const struct ncprange *, struct in_addr *); 102*86d7f5d3SJohn Marino extern int ncprange_getwidth(const struct ncprange *, int *); 103*86d7f5d3SJohn Marino extern const char *ncprange_ntoa(const struct ncprange *); 104*86d7f5d3SJohn Marino #ifndef NOINET6 105*86d7f5d3SJohn Marino extern int ncprange_scopeid(const struct ncprange *); 106*86d7f5d3SJohn Marino #endif 107*86d7f5d3SJohn Marino extern int ncprange_aton(struct ncprange *, struct ncp *, const char *); 108*86d7f5d3SJohn Marino 109*86d7f5d3SJohn Marino #define ncpaddr_family(a) ((a)->ncpaddr_family) 110*86d7f5d3SJohn Marino #define ncprange_family(r) ((r)->ncprange_family) 111