From 9234b382735b690f403ce018ce392316b2ad6e38 Mon Sep 17 00:00:00 2001 From: Doug VanLeuven Date: Wed, 10 Oct 2012 16:12:32 -0700 Subject: build: check actually-used BSD link state fields ifi_link_state missing in OS X. There could be other *BSD's that haven't implemented it and possibly affects older implementations. The existing HAVE_BSD_LINK_DETECT configure.ac check is only confirming the link state detection using ifmediareq.ifm_status found in . This is the link state detection used in zebra/ioctl.c. Later, *BSD redefined struct if_data in and included link state detection. This is the method used in zebra/kernel_socket.c Additional test defined in config.ac to test for member struct if_data.ifi_link_state defined in separate from test for ifmediareq.ifm_status Fixed #ifdef's in zebra/kernel_socket.c to use the new #define No impact on older function calls in zebra/ioctl.c Tested on 64bit OS X 10.7, FreeBSD 9.0 amd64 & i386 (32bit) using gcc & clang. Tested on linux 64bit. Signed-off-by: David Lamparter --- zebra/kernel_socket.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'zebra') diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index 20c17f9e..cde36bd0 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -316,7 +316,7 @@ ifan_read (struct if_announcemsghdr *ifan) } #endif /* RTM_IFANNOUNCE */ -#ifdef HAVE_BSD_LINK_DETECT +#ifdef HAVE_BSD_IFI_LINK_STATE /* BSD link detect translation */ static void bsd_linkdetect_translate (struct if_msghdr *ifm) @@ -327,7 +327,7 @@ bsd_linkdetect_translate (struct if_msghdr *ifm) else UNSET_FLAG(ifm->ifm_flags, IFF_RUNNING); } -#endif /* HAVE_BSD_LINK_DETECT */ +#endif /* HAVE_BSD_IFI_LINK_STATE */ /* * Handle struct if_msghdr obtained from reading routing socket or @@ -463,9 +463,9 @@ ifm_read (struct if_msghdr *ifm) */ ifp->ifindex = ifm->ifm_index; -#ifdef HAVE_BSD_LINK_DETECT /* translate BSD kernel msg for link-state */ +#ifdef HAVE_BSD_IFI_LINK_STATE /* translate BSD kernel msg for link-state */ bsd_linkdetect_translate(ifm); -#endif /* HAVE_BSD_LINK_DETECT */ +#endif /* HAVE_BSD_IFI_LINK_STATE */ if_flags_update (ifp, ifm->ifm_flags); #if defined(__bsdi__) @@ -504,9 +504,9 @@ ifm_read (struct if_msghdr *ifm) return -1; } -#ifdef HAVE_BSD_LINK_DETECT /* translate BSD kernel msg for link-state */ +#ifdef HAVE_BSD_IFI_LINK_STATE /* translate BSD kernel msg for link-state */ bsd_linkdetect_translate(ifm); -#endif /* HAVE_BSD_LINK_DETECT */ +#endif /* HAVE_BSD_IFI_LINK_STATE */ /* update flags and handle operative->inoperative transition, if any */ if_flags_update (ifp, ifm->ifm_flags); -- cgit v1.2.1