📄 netaddr_multicast.c
字号:
/* * Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000, 2001 Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. *//* $Id: netaddr_multicast.c,v 1.8.12.3 2004/03/08 04:04:31 marka Exp $ */#include <config.h>#include <stdlib.h>#include <stdio.h>#include <isc/net.h>#include <isc/netaddr.h>#include <isc/string.h>#include <isc/types.h>#include <isc/util.h>#include "driver.h"TESTDECL(netaddr_multicast);typedef struct { int family; const char *addr; isc_boolean_t is_multicast;} t_addr_t;static t_addr_t addrs[] = { { AF_INET, "1.2.3.4", ISC_FALSE }, { AF_INET, "4.3.2.1", ISC_FALSE }, { AF_INET, "224.1.1.1", ISC_TRUE }, { AF_INET, "1.1.1.244", ISC_FALSE }, { AF_INET6, "::1", ISC_FALSE }, { AF_INET6, "ff02::1", ISC_TRUE }};#define NADDRS (sizeof(addrs) / sizeof(t_addr_t))static isc_result_t to_netaddr(t_addr_t *, isc_netaddr_t *);static isc_result_tto_netaddr(t_addr_t *addr, isc_netaddr_t *na) { int r; struct in_addr in; struct in6_addr in6; switch (addr->family) { case AF_INET: r = inet_pton(AF_INET, addr->addr, (unsigned char *)&in); if (r != 1) return (ISC_R_FAILURE); isc_netaddr_fromin(na, &in); break; case AF_INET6: r = inet_pton(AF_INET6, addr->addr, (unsigned char *)&in6); if (r != 1) return (ISC_R_FAILURE); isc_netaddr_fromin6(na, &in6); break; default: return (ISC_R_UNEXPECTED); } return (ISC_R_SUCCESS);}test_result_tnetaddr_multicast(void) { isc_netaddr_t na; unsigned int n_fail; t_addr_t *addr; unsigned int i; isc_result_t result; isc_boolean_t tf; n_fail = 0; for (i = 0; i < NADDRS; i++) { addr = &addrs[i]; result = to_netaddr(addr, &na); if (result != ISC_R_SUCCESS) { printf("I:to_netaddr() returned %s on item %u\n", isc_result_totext(result), i); return (UNKNOWN); } tf = isc_netaddr_ismulticast(&na); if (tf == addr->is_multicast) { printf("I:%s is%s multicast (PASSED)\n", (addr->addr), (tf ? "" : " not")); } else { printf("I:%s is%s multicast (FAILED)\n", (addr->addr), (tf ? "" : " not")); n_fail++; } } if (n_fail > 0) return (FAILED); return (PASSED);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -