forked from Mirror/frr
2005-05-07 Yar Tikhiy <yar@comp.chem.msu.su>
* configure.ac: Check for OSes which support passing ifindex in struct ip_mreq. * lib/sockopt.c: Add support for BSD style ifindex in ip_mreq. * ospfd/ospf_network.c: Log ifindex on multicast membership leave/join events.
This commit is contained in:
parent
4dadc291e5
commit
42c981994a
|
@ -1,3 +1,8 @@
|
||||||
|
2005-05-07 Yar Tikhiy <yar@comp.chem.msu.su>
|
||||||
|
|
||||||
|
* configure.ac: Check for OSes which support passing ifindex in
|
||||||
|
struct ip_mreq.
|
||||||
|
|
||||||
2005-04-29 Paul Jakma <paul.jakma@sun.com>
|
2005-04-29 Paul Jakma <paul.jakma@sun.com>
|
||||||
|
|
||||||
* NEWS: Added some more 0.99 news.
|
* NEWS: Added some more 0.99 news.
|
||||||
|
|
28
configure.ac
28
configure.ac
|
@ -5,7 +5,7 @@
|
||||||
## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
|
## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
|
||||||
## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
|
## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
|
||||||
##
|
##
|
||||||
## $Id: configure.ac,v 1.105 2005/04/29 03:20:54 paul Exp $
|
## $Id: configure.ac,v 1.106 2005/05/07 02:22:51 paul Exp $
|
||||||
AC_PREREQ(2.53)
|
AC_PREREQ(2.53)
|
||||||
|
|
||||||
AC_INIT(Quagga, 0.99.1, [http://bugzilla.quagga.net])
|
AC_INIT(Quagga, 0.99.1, [http://bugzilla.quagga.net])
|
||||||
|
@ -321,7 +321,7 @@ AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
|
AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
|
||||||
sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
|
sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
|
||||||
sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
|
sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
|
||||||
libutil.h limits.h])
|
sys/param.h libutil.h limits.h])
|
||||||
|
|
||||||
AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
|
AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
|
||||||
net/if_dl.h net/netopt.h inet/nd.h net/route.h \
|
net/if_dl.h net/netopt.h inet/nd.h net/route.h \
|
||||||
|
@ -371,9 +371,6 @@ case "$host" in
|
||||||
AC_CHECK_LIB(nsl, gethostbyname)
|
AC_CHECK_LIB(nsl, gethostbyname)
|
||||||
AC_CHECK_LIB(socket, socket)
|
AC_CHECK_LIB(socket, socket)
|
||||||
;;
|
;;
|
||||||
*-freebsd3.2)
|
|
||||||
AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
|
|
||||||
;;
|
|
||||||
*-openbsd*)
|
*-openbsd*)
|
||||||
opsys=openbsd
|
opsys=openbsd
|
||||||
AC_DEFINE(OPEN_BSD,,OpenBSD)
|
AC_DEFINE(OPEN_BSD,,OpenBSD)
|
||||||
|
@ -648,6 +645,27 @@ fi
|
||||||
AC_SUBST(IF_METHOD)
|
AC_SUBST(IF_METHOD)
|
||||||
AC_SUBST(IOCTL_METHOD)
|
AC_SUBST(IOCTL_METHOD)
|
||||||
|
|
||||||
|
dnl ---------------------------------------------------------------
|
||||||
|
dnl figure out how to specify an interface in multicast sockets API
|
||||||
|
dnl ---------------------------------------------------------------
|
||||||
|
AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex],,,[#ifdef HAVE_SYS_TYPES_H
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for BSD struct ip_mreq hack])
|
||||||
|
AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
|
||||||
|
#include <sys/param.h>
|
||||||
|
#endif],[#if (defined(__FreeBSD__) && (__FreeBSD_version >= 500022 || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
|
||||||
|
return (0);
|
||||||
|
#else
|
||||||
|
#error No support for BSD struct ip_mreq hack detected
|
||||||
|
#endif],[AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
|
||||||
|
AC_MSG_RESULT(no))
|
||||||
|
|
||||||
dnl -----------------------
|
dnl -----------------------
|
||||||
dnl check proc file system.
|
dnl check proc file system.
|
||||||
dnl -----------------------
|
dnl -----------------------
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2005-05-07 Yar Tikhiy <yar@comp.chem.msu.su>
|
||||||
|
|
||||||
|
* sockopt.c: Add support for BSD style ifindex in ip_mreq.
|
||||||
|
|
||||||
2005-05-06 Paul Jakma <paul@dishone.st>
|
2005-05-06 Paul Jakma <paul@dishone.st>
|
||||||
|
|
||||||
* (general) extern and static'ification of functions in code and
|
* (general) extern and static'ification of functions in code and
|
||||||
|
|
|
@ -171,8 +171,7 @@ setsockopt_multicast_ipv4(int sock,
|
||||||
unsigned int ifindex)
|
unsigned int ifindex)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* Linux 2.2.0 and up */
|
#ifdef HAVE_STRUCT_IP_MREQN_IMR_IFINDEX
|
||||||
#if defined(GNU_LINUX) && LINUX_VERSION_CODE > 131584
|
|
||||||
/* This is better because it uses ifindex directly */
|
/* This is better because it uses ifindex directly */
|
||||||
struct ip_mreqn mreqn;
|
struct ip_mreqn mreqn;
|
||||||
|
|
||||||
|
@ -212,11 +211,16 @@ setsockopt_multicast_ipv4(int sock,
|
||||||
struct in_addr m;
|
struct in_addr m;
|
||||||
struct ip_mreq mreq;
|
struct ip_mreq mreq;
|
||||||
|
|
||||||
|
#ifdef HAVE_BSD_STRUCT_IP_MREQ_HACK
|
||||||
|
if (ifindex)
|
||||||
|
m.s_addr = htonl(ifindex);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
m = if_addr;
|
||||||
|
|
||||||
switch (optname)
|
switch (optname)
|
||||||
{
|
{
|
||||||
case IP_MULTICAST_IF:
|
case IP_MULTICAST_IF:
|
||||||
m = if_addr;
|
|
||||||
|
|
||||||
return setsockopt (sock, IPPROTO_IP, optname, (void *)&m, sizeof(m));
|
return setsockopt (sock, IPPROTO_IP, optname, (void *)&m, sizeof(m));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -224,7 +228,7 @@ setsockopt_multicast_ipv4(int sock,
|
||||||
case IP_DROP_MEMBERSHIP:
|
case IP_DROP_MEMBERSHIP:
|
||||||
memset (&mreq, 0, sizeof(mreq));
|
memset (&mreq, 0, sizeof(mreq));
|
||||||
mreq.imr_multiaddr.s_addr = mcast_addr;
|
mreq.imr_multiaddr.s_addr = mcast_addr;
|
||||||
mreq.imr_interface = if_addr;
|
mreq.imr_interface = m;
|
||||||
|
|
||||||
return setsockopt (sock,
|
return setsockopt (sock,
|
||||||
IPPROTO_IP,
|
IPPROTO_IP,
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2005-05-07 Yar Tikhiy <yar@comp.chem.msu.su>
|
||||||
|
|
||||||
|
* ospf_network.c: Log ifindex on multicast membership leave/join
|
||||||
|
events.
|
||||||
|
|
||||||
2005-05-06 Paul Jakma <paul.jakma@sun.com>
|
2005-05-06 Paul Jakma <paul.jakma@sun.com>
|
||||||
|
|
||||||
* (general) extern and static qualifiers added.
|
* (general) extern and static qualifiers added.
|
||||||
|
|
|
@ -60,8 +60,8 @@ ospf_if_add_allspfrouters (struct ospf *top, struct prefix *p,
|
||||||
"on # of multicast group memberships has been exceeded?",
|
"on # of multicast group memberships has been exceeded?",
|
||||||
top->fd, inet_ntoa(p->u.prefix4), ifindex, safe_strerror(errno));
|
top->fd, inet_ntoa(p->u.prefix4), ifindex, safe_strerror(errno));
|
||||||
else
|
else
|
||||||
zlog_info ("interface %s join AllSPFRouters Multicast group.",
|
zlog_info ("interface %s [%u] join AllSPFRouters Multicast group.",
|
||||||
inet_ntoa (p->u.prefix4));
|
inet_ntoa (p->u.prefix4), ifindex);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -80,8 +80,8 @@ ospf_if_drop_allspfrouters (struct ospf *top, struct prefix *p,
|
||||||
"ifindex %u, AllSPFRouters): %s",
|
"ifindex %u, AllSPFRouters): %s",
|
||||||
top->fd, inet_ntoa(p->u.prefix4), ifindex, safe_strerror(errno));
|
top->fd, inet_ntoa(p->u.prefix4), ifindex, safe_strerror(errno));
|
||||||
else
|
else
|
||||||
zlog_info ("interface %s leave AllSPFRouters Multicast group.",
|
zlog_info ("interface %s [%u] leave AllSPFRouters Multicast group.",
|
||||||
inet_ntoa (p->u.prefix4));
|
inet_ntoa (p->u.prefix4), ifindex);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -102,8 +102,8 @@ ospf_if_add_alldrouters (struct ospf *top, struct prefix *p, unsigned int
|
||||||
"on # of multicast group memberships has been exceeded?",
|
"on # of multicast group memberships has been exceeded?",
|
||||||
top->fd, inet_ntoa(p->u.prefix4), ifindex, safe_strerror(errno));
|
top->fd, inet_ntoa(p->u.prefix4), ifindex, safe_strerror(errno));
|
||||||
else
|
else
|
||||||
zlog_info ("interface %s join AllDRouters Multicast group.",
|
zlog_info ("interface %s [%u] join AllDRouters Multicast group.",
|
||||||
inet_ntoa (p->u.prefix4));
|
inet_ntoa (p->u.prefix4), ifindex);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -122,8 +122,8 @@ ospf_if_drop_alldrouters (struct ospf *top, struct prefix *p, unsigned int
|
||||||
"ifindex %u, AllDRouters): %s",
|
"ifindex %u, AllDRouters): %s",
|
||||||
top->fd, inet_ntoa(p->u.prefix4), ifindex, safe_strerror(errno));
|
top->fd, inet_ntoa(p->u.prefix4), ifindex, safe_strerror(errno));
|
||||||
else
|
else
|
||||||
zlog_info ("interface %s leave AllDRouters Multicast group.",
|
zlog_info ("interface %s [%u] leave AllDRouters Multicast group.",
|
||||||
inet_ntoa (p->u.prefix4));
|
inet_ntoa (p->u.prefix4), ifindex);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue