From 0bd83922cc17a79de74067b29fa83a1c306015a4 Mon Sep 17 00:00:00 2001 From: Yves Mettier Date: Mon, 4 Aug 2014 14:01:01 +0200 Subject: [PATCH] Fix for 'linux/inet_diag.h: No such file or directory' --- configure.in | 19 +++++++++++++++++++ src/tcpconns.c | 13 +++++++++++++ 2 files changed, 32 insertions(+) diff --git a/configure.in b/configure.in index ce59b71d..84d017a4 100644 --- a/configure.in +++ b/configure.in @@ -399,6 +399,18 @@ AC_CHECK_HEADERS(linux/if.h, [], [], # include #endif ]) +AC_CHECK_HEADERS(linux/inet_diag.h, [], [], +[ +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_SOCKET_H +# include +#endif +#if HAVE_LINUX_INET_DIAG_H +# include +#endif +]) AC_CHECK_HEADERS(linux/netdevice.h, [], [], [ #if HAVE_SYS_TYPES_H @@ -1242,6 +1254,13 @@ AC_CHECK_MEMBERS([struct net_device_stats.rx_bytes, struct net_device_stats.tx_p #include #include ]) +AC_CHECK_MEMBERS([struct inet_diag_req.id, struct inet_diag_req.idiag_states], + [AC_DEFINE(HAVE_STRUCT_LINUX_INET_DIAG_REQ, 1, [Define if struct inet_diag_req exists and is usable.])], + [], + [ + #include + ]) + AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], diff --git a/src/tcpconns.c b/src/tcpconns.c index 765b892e..6351c7b6 100644 --- a/src/tcpconns.c +++ b/src/tcpconns.c @@ -74,7 +74,9 @@ /* sys/socket.h is necessary to compile when using netlink on older systems. */ # include # include +#if HAVE_LINUX_INET_DIAG_H # include +#endif # include # include /* #endif KERNEL_LINUX */ @@ -137,10 +139,12 @@ #endif /* KERNEL_AIX */ #if KERNEL_LINUX +#if HAVE_STRUCT_LINUX_INET_DIAG_REQ struct nlreq { struct nlmsghdr nlh; struct inet_diag_req r; }; +#endif static const char *tcp_state[] = { @@ -276,7 +280,12 @@ static int port_collect_listening = 0; static port_entry_t *port_list_head = NULL; #if KERNEL_LINUX +#if HAVE_STRUCT_LINUX_INET_DIAG_REQ +/* This depends on linux inet_diag_req because if this structure is missing, + * sequence_number is useless and we get a compilation warning. + */ static uint32_t sequence_number = 0; +#endif enum { @@ -446,6 +455,7 @@ static int conn_handle_ports (uint16_t port_local, uint16_t port_remote, uint8_t * zero on other errors. */ static int conn_read_netlink (void) { +#if HAVE_STRUCT_LINUX_INET_DIAG_REQ int fd; struct sockaddr_nl nladdr; struct nlreq req; @@ -574,6 +584,9 @@ static int conn_read_netlink (void) /* Not reached because the while() loop above handles the exit condition. */ return (0); +#else + return (1); +#endif /* HAVE_STRUCT_LINUX_INET_DIAG_REQ */ } /* int conn_read_netlink */ static int conn_handle_line (char *buffer) -- 2.30.2