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