xref: /freebsd-src/contrib/unbound/edns-subnet/edns-subnet.h (revision 24e365220007c415f495cf8dcb228ece6002b8b7)
165b390aaSDag-Erling Smørgrav /*
265b390aaSDag-Erling Smørgrav  * edns-subnet/edns-subnet.h - Subnet option related constants
365b390aaSDag-Erling Smørgrav  *
465b390aaSDag-Erling Smørgrav  * Copyright (c) 2013, NLnet Labs. All rights reserved.
565b390aaSDag-Erling Smørgrav  *
665b390aaSDag-Erling Smørgrav  * This software is open source.
765b390aaSDag-Erling Smørgrav  *
865b390aaSDag-Erling Smørgrav  * Redistribution and use in source and binary forms, with or without
965b390aaSDag-Erling Smørgrav  * modification, are permitted provided that the following conditions
1065b390aaSDag-Erling Smørgrav  * are met:
1165b390aaSDag-Erling Smørgrav  *
1265b390aaSDag-Erling Smørgrav  * Redistributions of source code must retain the above copyright notice,
1365b390aaSDag-Erling Smørgrav  * this list of conditions and the following disclaimer.
1465b390aaSDag-Erling Smørgrav  *
1565b390aaSDag-Erling Smørgrav  * Redistributions in binary form must reproduce the above copyright notice,
1665b390aaSDag-Erling Smørgrav  * this list of conditions and the following disclaimer in the documentation
1765b390aaSDag-Erling Smørgrav  * and/or other materials provided with the distribution.
1865b390aaSDag-Erling Smørgrav  *
1965b390aaSDag-Erling Smørgrav  * Neither the name of the NLNET LABS nor the names of its contributors may
2065b390aaSDag-Erling Smørgrav  * be used to endorse or promote products derived from this software without
2165b390aaSDag-Erling Smørgrav  * specific prior written permission.
2265b390aaSDag-Erling Smørgrav  *
2365b390aaSDag-Erling Smørgrav  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2465b390aaSDag-Erling Smørgrav  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2565b390aaSDag-Erling Smørgrav  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2665b390aaSDag-Erling Smørgrav  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2765b390aaSDag-Erling Smørgrav  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2865b390aaSDag-Erling Smørgrav  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
2965b390aaSDag-Erling Smørgrav  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
3065b390aaSDag-Erling Smørgrav  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
3165b390aaSDag-Erling Smørgrav  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
3265b390aaSDag-Erling Smørgrav  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
3365b390aaSDag-Erling Smørgrav  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3465b390aaSDag-Erling Smørgrav  */
3565b390aaSDag-Erling Smørgrav /**
3665b390aaSDag-Erling Smørgrav  * \file
3765b390aaSDag-Erling Smørgrav  * Subnet option related constants.
3865b390aaSDag-Erling Smørgrav  */
3965b390aaSDag-Erling Smørgrav 
4065b390aaSDag-Erling Smørgrav #include "util/net_help.h"
4165b390aaSDag-Erling Smørgrav 
4265b390aaSDag-Erling Smørgrav #ifndef EDNSSUBNET_EDNSSUBNET_H
4365b390aaSDag-Erling Smørgrav #define EDNSSUBNET_EDNSSUBNET_H
4465b390aaSDag-Erling Smørgrav 
4565b390aaSDag-Erling Smørgrav /** In use by the edns subnet option code, as assigned by IANA */
4665b390aaSDag-Erling Smørgrav #define EDNSSUBNET_ADDRFAM_IP4 1
4765b390aaSDag-Erling Smørgrav #define EDNSSUBNET_ADDRFAM_IP6 2
4865b390aaSDag-Erling Smørgrav 
4965b390aaSDag-Erling Smørgrav /**
5065b390aaSDag-Erling Smørgrav  * ECS option
5165b390aaSDag-Erling Smørgrav  */
5265b390aaSDag-Erling Smørgrav struct ecs_data {
5365b390aaSDag-Erling Smørgrav 	uint16_t subnet_addr_fam;
5465b390aaSDag-Erling Smørgrav 	uint8_t subnet_source_mask;
5565b390aaSDag-Erling Smørgrav 	uint8_t subnet_scope_mask;
5665b390aaSDag-Erling Smørgrav 	uint8_t subnet_addr[INET6_SIZE];
5765b390aaSDag-Erling Smørgrav 	int subnet_validdata;
5865b390aaSDag-Erling Smørgrav };
5965b390aaSDag-Erling Smørgrav 
6065b390aaSDag-Erling Smørgrav /**
6165b390aaSDag-Erling Smørgrav  * copy the first n BITS from src to dst iff both src and dst
62*24e36522SCy Schubert  * are large enough, return 0 on success
6365b390aaSDag-Erling Smørgrav  */
6465b390aaSDag-Erling Smørgrav int
6565b390aaSDag-Erling Smørgrav copy_clear(uint8_t* dst, size_t dstlen, uint8_t* src, size_t srclen, size_t n);
6665b390aaSDag-Erling Smørgrav 
6765b390aaSDag-Erling Smørgrav #endif /* EDNSSUBNET_EDNSSUBNET_H */
68