181634Sbrian/*- 281634Sbrian * Copyright (c) 2001 Brian Somers <brian@Awfulhak.org> 381634Sbrian * All rights reserved. 481634Sbrian * 581634Sbrian * Redistribution and use in source and binary forms, with or without 681634Sbrian * modification, are permitted provided that the following conditions 781634Sbrian * are met: 881634Sbrian * 1. Redistributions of source code must retain the above copyright 981634Sbrian * notice, this list of conditions and the following disclaimer. 1081634Sbrian * 2. Redistributions in binary form must reproduce the above copyright 1181634Sbrian * notice, this list of conditions and the following disclaimer in the 1281634Sbrian * documentation and/or other materials provided with the distribution. 1381634Sbrian * 1481634Sbrian * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1581634Sbrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1681634Sbrian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1781634Sbrian * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1881634Sbrian * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1981634Sbrian * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2081634Sbrian * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2181634Sbrian * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2281634Sbrian * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2381634Sbrian * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2481634Sbrian * SUCH DAMAGE. 2581634Sbrian * 2681634Sbrian * $FreeBSD: releng/11.0/usr.sbin/ppp/ncpaddr.h 86815 2001-11-23 12:39:20Z brian $ 2781634Sbrian */ 2881634Sbrian 2981634Sbrian/* 3081634Sbrian * These structures should be treated as opaque. 3181634Sbrian */ 3281634Sbrianstruct ncprange { 3381634Sbrian sa_family_t ncprange_family; 3481634Sbrian union { 3581634Sbrian struct { 3681634Sbrian struct in_addr ipaddr; 3781634Sbrian struct in_addr mask; 3881634Sbrian int width; 3981634Sbrian } ip4; 4081634Sbrian#ifndef NOINET6 4181634Sbrian struct { 4281634Sbrian struct in6_addr ipaddr; 4381634Sbrian int width; 4481634Sbrian } ip6; 4581634Sbrian#endif 4681634Sbrian } u; 4781634Sbrian}; 4881634Sbrian 4981634Sbrianstruct ncpaddr { 5081634Sbrian sa_family_t ncpaddr_family; 5181634Sbrian union { 5281634Sbrian struct in_addr ip4addr; 5381634Sbrian#ifndef NOINET6 5481634Sbrian struct in6_addr ip6addr; 5581634Sbrian#endif 5681634Sbrian } u; 5781634Sbrian}; 5881634Sbrian 5981634Sbrianstruct ncp; 6081634Sbrian 6181634Sbrianextern void ncpaddr_init(struct ncpaddr *); 6281739Sbrianextern int ncpaddr_isset(const struct ncpaddr *); 6381634Sbrianextern int ncpaddr_isdefault(const struct ncpaddr *); 6481634Sbrianextern int ncpaddr_equal(const struct ncpaddr *, const struct ncpaddr *); 6581634Sbrianextern void ncpaddr_copy(struct ncpaddr *, const struct ncpaddr *); 6681634Sbrianextern void ncpaddr_setip4addr(struct ncpaddr *, u_int32_t); 6781634Sbrianextern int ncpaddr_getip4addr(const struct ncpaddr *, u_int32_t *); 6881634Sbrianextern void ncpaddr_setip4(struct ncpaddr *, struct in_addr); 6981634Sbrianextern int ncpaddr_getip4(const struct ncpaddr *, struct in_addr *); 7081634Sbrian#ifndef NOINET6 7181634Sbrianextern void ncpaddr_setip6(struct ncpaddr *, const struct in6_addr *); 7281634Sbrianextern int ncpaddr_getip6(const struct ncpaddr *, struct in6_addr *); 7381634Sbrian#endif 7481634Sbrianextern void ncpaddr_getsa(const struct ncpaddr *, struct sockaddr_storage *); 7581634Sbrianextern void ncpaddr_setsa(struct ncpaddr *, const struct sockaddr *); 7681634Sbrianextern const char *ncpaddr_ntoa(const struct ncpaddr *); 7781634Sbrianextern int ncpaddr_aton(struct ncpaddr *, struct ncp *, const char *); 7881634Sbrian 7981634Sbrianextern void ncprange_init(struct ncprange *); 8081634Sbrianextern int ncprange_isset(const struct ncprange *); 8181634Sbrianextern int ncprange_equal(const struct ncprange *, const struct ncprange *); 8281634Sbrianextern int ncprange_isdefault(const struct ncprange *); 8381634Sbrianextern void ncprange_setdefault(struct ncprange *, int); 8481634Sbrianextern int ncprange_contains(const struct ncprange *, const struct ncpaddr *); 8581634Sbrianextern int ncprange_containsip4(const struct ncprange *, struct in_addr); 8681634Sbrianextern void ncprange_copy(struct ncprange *, const struct ncprange *); 8781634Sbrianextern void ncprange_set(struct ncprange *, const struct ncpaddr *, int); 8881634Sbrianextern void ncprange_sethost(struct ncprange *, const struct ncpaddr *); 8986815Sbrianextern int ncprange_ishost(const struct ncprange *); 9081634Sbrianextern int ncprange_setwidth(struct ncprange *, int); 9181634Sbrianextern void ncprange_setip4(struct ncprange *, struct in_addr, struct in_addr); 9281634Sbrianextern void ncprange_setip4host(struct ncprange *, struct in_addr); 9381634Sbrianextern int ncprange_setip4mask(struct ncprange *, struct in_addr); 9481634Sbrianextern void ncprange_setsa(struct ncprange *, const struct sockaddr *, 9581634Sbrian const struct sockaddr *); 9681634Sbrianextern void ncprange_getsa(const struct ncprange *, struct sockaddr_storage *, 9781634Sbrian struct sockaddr_storage *); 9881634Sbrianextern int ncprange_getaddr(const struct ncprange *, struct ncpaddr *); 9981634Sbrianextern int ncprange_getip4addr(const struct ncprange *, struct in_addr *); 10081634Sbrianextern int ncprange_getip4mask(const struct ncprange *, struct in_addr *); 10181634Sbrianextern int ncprange_getwidth(const struct ncprange *, int *); 10281634Sbrianextern const char *ncprange_ntoa(const struct ncprange *); 10381634Sbrian#ifndef NOINET6 10481634Sbrianextern int ncprange_scopeid(const struct ncprange *); 10581634Sbrian#endif 10681634Sbrianextern int ncprange_aton(struct ncprange *, struct ncp *, const char *); 10781634Sbrian 10881634Sbrian#define ncpaddr_family(a) ((a)->ncpaddr_family) 10981634Sbrian#define ncprange_family(r) ((r)->ncprange_family) 110