inter_test.c revision 70e5a7403f0e0a3bd292b8287c5fed5772c15270
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews/*
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence * Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and/or distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * copyright notice and this permission notice appear in all copies.
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews *
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
4be63b1fd8c18dbeca1648d6cf22fa14f057a469David Lawrence * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4be63b1fd8c18dbeca1648d6cf22fa14f057a469David Lawrence * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
4be63b1fd8c18dbeca1648d6cf22fa14f057a469David Lawrence * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
70e5a7403f0e0a3bd292b8287c5fed5772c15270Automatic Updater * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews * PERFORMANCE OF THIS SOFTWARE.
94a3bcd132e515b4baa0884ba9dd0f361d2e17bcMark Andrews */
05f90cac85760b4edef2962209df49ea019c180fMark Andrews
05f90cac85760b4edef2962209df49ea019c180fMark Andrews/* $Id: inter_test.c,v 1.14 2007/06/19 23:46:59 tbox Exp $ */
c38b92000c0f1a95daaad5468777e165b8047de9Mark Andrews
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein/*! \file */
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein#include <config.h>
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein#include <stdlib.h>
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein
4fd3e3482c7e4ce01e2cf28f13e0152c8e50d746Mark Andrews#include <isc/interfaceiter.h>
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews#include <isc/mem.h>
4be63b1fd8c18dbeca1648d6cf22fa14f057a469David Lawrence#include <isc/util.h>
4be63b1fd8c18dbeca1648d6cf22fa14f057a469David Lawrence
int
main(int argc, char **argv) {
isc_mem_t *mctx = NULL;
isc_interfaceiter_t *iter = NULL;
isc_interface_t ifdata;
isc_result_t result;
const char * res;
char buf[128];
UNUSED(argc);
UNUSED(argv);
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
result = isc_interfaceiter_create(mctx, &iter);
if (result != ISC_R_SUCCESS)
goto cleanup;
result = isc_interfaceiter_first(iter);
while (result == ISC_R_SUCCESS) {
result = isc_interfaceiter_current(iter, &ifdata);
if (result != ISC_R_SUCCESS) {
fprintf(stdout, "isc_interfaceiter_current: %s",
isc_result_totext(result));
continue;
}
fprintf(stdout, "%s %d %x\n", ifdata.name, ifdata.af,
ifdata.flags);
INSIST(ifdata.af == AF_INET || ifdata.af == AF_INET6);
res = inet_ntop(ifdata.af, &ifdata.address.type, buf,
sizeof(buf));
if (ifdata.address.zone != 0)
fprintf(stdout, "address = %s (zone %u)\n",
res == NULL ? "BAD" : res,
ifdata.address.zone);
else
fprintf(stdout, "address = %s\n",
res == NULL ? "BAD" : res);
INSIST(ifdata.address.family == ifdata.af);
res = inet_ntop(ifdata.af, &ifdata.netmask.type, buf,
sizeof(buf));
fprintf(stdout, "netmask = %s\n", res == NULL ? "BAD" : res);
INSIST(ifdata.netmask.family == ifdata.af);
if ((ifdata.flags & INTERFACE_F_POINTTOPOINT) != 0) {
res = inet_ntop(ifdata.af, &ifdata.dstaddress.type,
buf, sizeof(buf));
fprintf(stdout, "dstaddress = %s\n",
res == NULL ? "BAD" : res);
INSIST(ifdata.dstaddress.family == ifdata.af);
}
result = isc_interfaceiter_next(iter);
if (result != ISC_R_SUCCESS && result != ISC_R_NOMORE) {
fprintf(stdout, "isc_interfaceiter_next: %s",
isc_result_totext(result));
continue;
}
}
isc_interfaceiter_destroy(&iter);
cleanup:
isc_mem_destroy(&mctx);
return (0);
}