0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-21 17:21:53 +00:00

Use struct ip_mreqn' instead of struct ip_mreq' for multicast

operations on 2.1/2.2 kernels. This allows passing of real interface
indexes instead of referencing interfaces by their IP addresses which
fails badly in presence of unnumbered interfaces.

Unfortunately, this structure is not visible with glibc 2.0 as it provides
its own networking headers :-(  Both libc5 and glibc 2.1 should be OK.
This commit is contained in:
Martin Mares 1999-04-12 15:27:56 +00:00
parent 5a99ade413
commit 61fb537c62
4 changed files with 17 additions and 2 deletions

12
aclocal.m4 vendored
View File

@ -116,3 +116,15 @@ case "$bird_cv_type_time_t" in
*) AC_DEFINE(TIME_T_IS_SIGNED) ;; *) AC_DEFINE(TIME_T_IS_SIGNED) ;;
esac esac
]) ])
AC_DEFUN(BIRD_CHECK_STRUCT_IP_MREQN,
[AC_CACHE_CHECK([struct ip_mreqn], bird_cv_struct_ip_mreqn,[
AC_TRY_COMPILE([#include <netinet/in.h>
],[struct ip_mreqn x;
],[bird_cv_struct_ip_mreqn=yes
],[bird_cv_struct_ip_mreqn=no
])])
if test "$bird_cv_struct_ip_mreqn" = yes ; then
AC_DEFINE(HAVE_STRUCT_IP_MREQN)
fi
])

View File

@ -109,6 +109,7 @@ BIRD_CHECK_INTEGERS
BIRD_CHECK_ENDIAN BIRD_CHECK_ENDIAN
BIRD_CHECK_STRUCT_ALIGN BIRD_CHECK_STRUCT_ALIGN
BIRD_CHECK_TIME_T BIRD_CHECK_TIME_T
BIRD_CHECK_STRUCT_MREQN
if test "$enable_debug" = yes ; then if test "$enable_debug" = yes ; then
AC_DEFINE(PATH_CONFIG_DIR, ".") AC_DEFINE(PATH_CONFIG_DIR, ".")

View File

@ -29,6 +29,9 @@
#undef TIME_T_IS_64BIT #undef TIME_T_IS_64BIT
#undef TIME_T_IS_SIGNED #undef TIME_T_IS_SIGNED
/* We have struct ip_mreqn in <netinet/in.h> */
#undef HAVE_STRUCT_IP_MREQN
/* Protocols compiled in */ /* Protocols compiled in */
#undef CONFIG_STATIC #undef CONFIG_STATIC
#undef CONFIG_RIP #undef CONFIG_RIP

View File

@ -407,8 +407,7 @@ sk_open(sock *s)
case SK_UDP_MC: case SK_UDP_MC:
case SK_IP_MC: case SK_IP_MC:
{ {
#ifdef HAVE_IP_MREQN #ifdef HAVE_STRUCT_IP_MREQN
/* FIXME: Define HAVE_IP_MREQN somewhere :) */
struct ip_mreqn mreq; struct ip_mreqn mreq;
#define mreq_add mreq #define mreq_add mreq
ASSERT(s->iface); ASSERT(s->iface);