1/* 2 * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 1999-2001 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 * PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18/* $Id: t_sockaddr.c,v 1.14 2007/06/19 23:47:00 tbox Exp $ */ 19 20#include <config.h> 21 22#include <isc/netaddr.h> 23#include <isc/result.h> 24#include <isc/sockaddr.h> 25 26#include <tests/t_api.h> 27 28static int 29test_isc_sockaddr_eqaddrprefix(void) { 30 struct in_addr ina_a; 31 struct in_addr ina_b; 32 struct in_addr ina_c; 33 isc_sockaddr_t isa_a; 34 isc_sockaddr_t isa_b; 35 isc_sockaddr_t isa_c; 36 37 if (inet_pton(AF_INET, "194.100.32.87", &ina_a) < 0) 38 return T_FAIL; 39 if (inet_pton(AF_INET, "194.100.32.80", &ina_b) < 0) 40 return T_FAIL; 41 if (inet_pton(AF_INET, "194.101.32.87", &ina_c) < 0) 42 return T_FAIL; 43 isc_sockaddr_fromin(&isa_a, &ina_a, 0); 44 isc_sockaddr_fromin(&isa_b, &ina_b, 42); 45 isc_sockaddr_fromin(&isa_c, &ina_c, 0); 46 47 if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_b, 0) != ISC_TRUE) 48 return T_FAIL; 49 if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_b, 29) != ISC_TRUE) 50 return T_FAIL; 51 if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_b, 30) != ISC_FALSE) 52 return T_FAIL; 53 if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_b, 32) != ISC_FALSE) 54 return T_FAIL; 55 if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_c, 8) != ISC_TRUE) 56 return T_FAIL; 57 if (isc_sockaddr_eqaddrprefix(&isa_a, &isa_c, 16) != ISC_FALSE) 58 return T_FAIL; 59 60 return T_PASS; 61} 62 63static void 64t1(void) { 65 int result; 66 t_assert("isc_sockaddr_eqaddrprefix", 1, T_REQUIRED, 67 "isc_sockaddr_eqaddrprefix() returns ISC_TRUE when " 68 "prefixes of a and b are equal, and ISC_FALSE when " 69 "they are not equal"); 70 result = test_isc_sockaddr_eqaddrprefix(); 71 t_result(result); 72} 73 74static int 75test_isc_netaddr_masktoprefixlen(void) { 76 struct in_addr na_a; 77 struct in_addr na_b; 78 struct in_addr na_c; 79 struct in_addr na_d; 80 isc_netaddr_t ina_a; 81 isc_netaddr_t ina_b; 82 isc_netaddr_t ina_c; 83 isc_netaddr_t ina_d; 84 unsigned int plen; 85 86 if (inet_pton(AF_INET, "0.0.0.0", &na_a) < 0) 87 return T_FAIL; 88 if (inet_pton(AF_INET, "255.255.255.254", &na_b) < 0) 89 return T_FAIL; 90 if (inet_pton(AF_INET, "255.255.255.255", &na_c) < 0) 91 return T_FAIL; 92 if (inet_pton(AF_INET, "255.255.255.0", &na_d) < 0) 93 return T_FAIL; 94 isc_netaddr_fromin(&ina_a, &na_a); 95 isc_netaddr_fromin(&ina_b, &na_b); 96 isc_netaddr_fromin(&ina_c, &na_c); 97 isc_netaddr_fromin(&ina_d, &na_d); 98 99 if (isc_netaddr_masktoprefixlen(&ina_a, &plen) != ISC_R_SUCCESS) 100 return T_FAIL; 101 if (plen != 0) 102 return T_FAIL; 103 104 if (isc_netaddr_masktoprefixlen(&ina_b, &plen) != ISC_R_SUCCESS) 105 return T_FAIL; 106 if (plen != 31) 107 return T_FAIL; 108 109 if (isc_netaddr_masktoprefixlen(&ina_c, &plen) != ISC_R_SUCCESS) 110 return T_FAIL; 111 if (plen != 32) 112 return T_FAIL; 113 114 if (isc_netaddr_masktoprefixlen(&ina_d, &plen) != ISC_R_SUCCESS) 115 return T_FAIL; 116 if (plen != 24) 117 return T_FAIL; 118 119 return T_PASS; 120} 121 122static void 123t2(void) { 124 int result; 125 t_assert("isc_netaddr_masktoprefixlen", 1, T_REQUIRED, 126 "isc_netaddr_masktoprefixlen() calculates " 127 "correct prefix lengths "); 128 result = test_isc_netaddr_masktoprefixlen(); 129 t_result(result); 130} 131 132testspec_t T_testlist[] = { 133 { t1, "isc_sockaddr_eqaddrprefix" }, 134 { t2, "isc_netaddr_masktoprefixlen" }, 135 { NULL, NULL } 136}; 137 138