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