1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-17 13:09:02 +00:00

Use getkerninfo to get routing information on AIX.

This commit is contained in:
david
2011-09-21 07:31:34 +00:00
parent 3efe011acc
commit 0bce585dec
6 changed files with 104 additions and 1 deletions

View File

@@ -265,6 +265,26 @@ AC_DEFUN(AC_DNET_RAWIP_COOKED,
[Define if you have cooked raw IP sockets.])
fi])
dnl
dnl Check for getkerninfo
dnl
dnl usage: AC_DNET_GETKERNINFO
dnl results: HAVE_GETKERNINFO
dnl
AC_DEFUN(AC_DNET_GETKERNINFO,
[AC_MSG_CHECKING(for getkerninfo)
AC_CACHE_VAL(ac_cv_dnet_getkerninfo,
AC_TRY_COMPILE([
# include <sys/kinfo.h>],
[getkerninfo(KINFO_RT_DUMP, 0, 0, 0);],
ac_cv_dnet_getkerninfo=yes,
ac_cv_dnet_getkerninfo=no))
AC_MSG_RESULT($ac_cv_dnet_getkerninfo)
if test $ac_cv_dnet_getkerninfo = yes ; then
AC_DEFINE(HAVE_GETKERNINFO, 1,
[Define if <sys/kinfo.h> has getkerninfo.])
fi])
dnl
dnl AC_LBL_LIBRARY_NET
dnl

View File

@@ -14582,6 +14582,64 @@ $as_echo "$ac_cv_dnet_rawip_cooked" >&6; }
cat >>confdefs.h <<\_ACEOF
#define HAVE_RAWIP_COOKED 1
_ACEOF
fi
{ echo "$as_me:$LINENO: checking for getkerninfo" >&5
echo $ECHO_N "checking for getkerninfo... $ECHO_C" >&6; }
if test "${ac_cv_dnet_getkerninfo+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
# include <sys/kinfo.h>
int
main ()
{
getkerninfo(KINFO_RT_DUMP, 0, 0, 0);
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
ac_cv_dnet_getkerninfo=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_dnet_getkerninfo=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ echo "$as_me:$LINENO: result: $ac_cv_dnet_getkerninfo" >&5
echo "${ECHO_T}$ac_cv_dnet_getkerninfo" >&6; }
if test $ac_cv_dnet_getkerninfo = yes ; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_GETKERNINFO 1
_ACEOF
fi

View File

@@ -212,6 +212,7 @@ if test "$CYGWIN" != yes ; then
AC_DNET_IOCTL_ARP
AC_DNET_RAWIP_HOST_OFFLEN
AC_DNET_RAWIP_COOKED
AC_DNET_GETKERNINFO
fi
dnl Check for arp interface.

View File

@@ -130,6 +130,9 @@
/* Define if you have cooked raw IP sockets. */
#undef HAVE_RAWIP_COOKED
/* Define if <sys/kinfo.h> has getkerninfo. */
#undef HAVE_GETKERNINFO
/* Define if raw IP sockets require host byte ordering for ip_off, ip_len. */
#undef HAVE_RAWIP_HOST_OFFLEN

View File

@@ -131,6 +131,9 @@
/* Define if you have cooked raw IP sockets. */
/* #undef HAVE_RAWIP_COOKED */
/* Define if <sys/kinfo.h> has getkerninfo. */
/* #undef HAVE_GETKERNINFO */
/* Define if raw IP sockets require host byte ordering for ip_off, ip_len. */
/* #undef HAVE_RAWIP_HOST_OFFLEN */

View File

@@ -28,6 +28,9 @@
#include <sys/stream.h>
#include <sys/stropts.h>
#endif
#ifdef HAVE_GETKERNINFO
#include <sys/kinfo.h>
#endif
#define route_t oroute_t /* XXX - unixware */
#include <net/route.h>
@@ -213,7 +216,7 @@ route_get(route_t *r, struct route_entry *entry)
return (0);
}
#if defined(HAVE_SYS_SYSCTL_H) || defined(HAVE_STREAMS_ROUTE)
#if defined(HAVE_SYS_SYSCTL_H) || defined(HAVE_STREAMS_ROUTE) || defined(HAVE_GETKERNINFO)
int
route_loop(route_t *r, route_handler callback, void *arg)
{
@@ -241,6 +244,21 @@ route_loop(route_t *r, route_handler callback, void *arg)
}
lim = buf + len;
next = buf;
#elif defined(HAVE_GETKERNINFO)
int len = getkerninfo(KINFO_RT_DUMP,0,0,0);
if (len == 0)
return (0);
if ((buf = malloc(len)) == NULL)
return (-1);
if (getkerninfo(KINFO_RT_DUMP,buf,&len,0) < 0) {
free(buf);
return (-1);
}
lim = buf + len;
next = buf;
#else /* HAVE_STREAMS_ROUTE */
struct rt_giarg giarg, *gp;