xref: /src/contrib/unbound/edns-subnet/edns-subnet.h (revision 24e365220007c415f495cf8dcb228ece6002b8b7)
16cacf549SDag-Erling Smørgrav /*
26cacf549SDag-Erling Smørgrav  * edns-subnet/edns-subnet.h - Subnet option related constants
36cacf549SDag-Erling Smørgrav  *
46cacf549SDag-Erling Smørgrav  * Copyright (c) 2013, NLnet Labs. All rights reserved.
56cacf549SDag-Erling Smørgrav  *
66cacf549SDag-Erling Smørgrav  * This software is open source.
76cacf549SDag-Erling Smørgrav  *
86cacf549SDag-Erling Smørgrav  * Redistribution and use in source and binary forms, with or without
96cacf549SDag-Erling Smørgrav  * modification, are permitted provided that the following conditions
106cacf549SDag-Erling Smørgrav  * are met:
116cacf549SDag-Erling Smørgrav  *
126cacf549SDag-Erling Smørgrav  * Redistributions of source code must retain the above copyright notice,
136cacf549SDag-Erling Smørgrav  * this list of conditions and the following disclaimer.
146cacf549SDag-Erling Smørgrav  *
156cacf549SDag-Erling Smørgrav  * Redistributions in binary form must reproduce the above copyright notice,
166cacf549SDag-Erling Smørgrav  * this list of conditions and the following disclaimer in the documentation
176cacf549SDag-Erling Smørgrav  * and/or other materials provided with the distribution.
186cacf549SDag-Erling Smørgrav  *
196cacf549SDag-Erling Smørgrav  * Neither the name of the NLNET LABS nor the names of its contributors may
206cacf549SDag-Erling Smørgrav  * be used to endorse or promote products derived from this software without
216cacf549SDag-Erling Smørgrav  * specific prior written permission.
226cacf549SDag-Erling Smørgrav  *
236cacf549SDag-Erling Smørgrav  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
246cacf549SDag-Erling Smørgrav  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
256cacf549SDag-Erling Smørgrav  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
266cacf549SDag-Erling Smørgrav  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
276cacf549SDag-Erling Smørgrav  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
286cacf549SDag-Erling Smørgrav  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
296cacf549SDag-Erling Smørgrav  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
306cacf549SDag-Erling Smørgrav  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
316cacf549SDag-Erling Smørgrav  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
326cacf549SDag-Erling Smørgrav  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
336cacf549SDag-Erling Smørgrav  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
346cacf549SDag-Erling Smørgrav  */
356cacf549SDag-Erling Smørgrav /**
366cacf549SDag-Erling Smørgrav  * \file
376cacf549SDag-Erling Smørgrav  * Subnet option related constants.
386cacf549SDag-Erling Smørgrav  */
396cacf549SDag-Erling Smørgrav 
406cacf549SDag-Erling Smørgrav #include "util/net_help.h"
416cacf549SDag-Erling Smørgrav 
426cacf549SDag-Erling Smørgrav #ifndef EDNSSUBNET_EDNSSUBNET_H
436cacf549SDag-Erling Smørgrav #define EDNSSUBNET_EDNSSUBNET_H
446cacf549SDag-Erling Smørgrav 
456cacf549SDag-Erling Smørgrav /** In use by the edns subnet option code, as assigned by IANA */
466cacf549SDag-Erling Smørgrav #define EDNSSUBNET_ADDRFAM_IP4 1
476cacf549SDag-Erling Smørgrav #define EDNSSUBNET_ADDRFAM_IP6 2
486cacf549SDag-Erling Smørgrav 
496cacf549SDag-Erling Smørgrav /**
506cacf549SDag-Erling Smørgrav  * ECS option
516cacf549SDag-Erling Smørgrav  */
526cacf549SDag-Erling Smørgrav struct ecs_data {
536cacf549SDag-Erling Smørgrav 	uint16_t subnet_addr_fam;
546cacf549SDag-Erling Smørgrav 	uint8_t subnet_source_mask;
556cacf549SDag-Erling Smørgrav 	uint8_t subnet_scope_mask;
566cacf549SDag-Erling Smørgrav 	uint8_t subnet_addr[INET6_SIZE];
576cacf549SDag-Erling Smørgrav 	int subnet_validdata;
586cacf549SDag-Erling Smørgrav };
596cacf549SDag-Erling Smørgrav 
606cacf549SDag-Erling Smørgrav /**
616cacf549SDag-Erling Smørgrav  * copy the first n BITS from src to dst iff both src and dst
6268965ba9SCy Schubert  * are large enough, return 0 on success
636cacf549SDag-Erling Smørgrav  */
646cacf549SDag-Erling Smørgrav int
656cacf549SDag-Erling Smørgrav copy_clear(uint8_t* dst, size_t dstlen, uint8_t* src, size_t srclen, size_t n);
666cacf549SDag-Erling Smørgrav 
676cacf549SDag-Erling Smørgrav #endif /* EDNSSUBNET_EDNSSUBNET_H */
68